【问题标题】:Python: read_csv into dataframe - can't convert object into floatPython:read_csv 转换为数据框 - 无法将对象转换为浮点数
【发布时间】:2016-01-29 16:54:53
【问题描述】:

我输入 read_csv 的 csv 文件是几列,有百分比变化,但它有一些隐藏字符。来自repr(data2)

我尝试了以下方法:

data2 = pd.read_csv('C:/Users/nnayyar/Documents/MonteCarlo2.csv', "\n", delimiter = ",", dtype = float)

并得到以下错误:

ValueError: invalid literal for float(): 7.05%

我尝试了一些方法:

float(data2.replace('/n',''))
map(float, data2.strip().split('\r\n'))

但分别收到各种错误 TypeError: float() 参数必须是字符串或数字 AttributeError: 'DataFrame' 对象没有属性 'strip'

任何将 CSV 对象类型转换为浮点类型的帮助都会有所帮助!谢谢!!

【问题讨论】:

  • 您必须传递一个转换器函数或通过剥离% 符号作为后处理作业进行转换
  • 如果我尝试使用 .strip() 我得到以下错误: AttributeError: 'DataFrame' object has no attribute 'strip';还尝试了 data2.map(lambda x: x.lstrip('%')) 并得到了类似的错误。

标签: python csv pandas


【解决方案1】:

如果您的整个 csv 都有百分号,那么以下方法将起作用:

In [203]:
import pandas as pd
import io
t="""0   1   2  3
1.5%  2.5%   6.5%   0.5%"""
# load some dummy data
df = pd.read_csv(io.StringIO(t), delim_whitespace=True)
df

Out[203]:
      0     1     2     3
0  1.5%  2.5%  6.5%  0.5%

In [205]:
# apply a lambda that replaces the % signs and cast to float    
df.apply(lambda x: x.str.replace('%','')).astype(float)

Out[205]:
     0    1    2    3
0  1.5  2.5  6.5  0.5

因此,这将 lambda 应用于调用矢量化 str.replace 的每一列以删除 % 符号,然后我们可以使用 astype 将类型转换为浮点数

所以在你的情况下应该可以:

data2 = pd.read_csv('C:/Users/nnayyar/Documents/MonteCarlo2.csv', "\n")
data2 = data2.apply(lambda x: x.str.replace('%', '').astype(float))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-11
    • 2018-12-09
    • 2015-10-05
    • 2016-04-14
    • 1970-01-01
    • 2019-11-25
    相关资源
    最近更新 更多