将 csv 文件作为浮点数读取到 pandas 数据帧
Posted
技术标签:
【中文标题】将 csv 文件作为浮点数读取到 pandas 数据帧【英文标题】:reading csv file to pandas dataframe as float 【发布时间】:2017-12-15 02:15:48 【问题描述】:我有一个.csv
文件,其中第一行和第一列中有字符串,其余数据为浮点数。我想将它读入一个数据框,第一行和第一列分别作为列名和索引,所有浮动值都作为float64
。
如果我使用df = pd.read_csv(filename,index_col=0)
,则所有数值都保留为字符串。
如果我使用df = pd.read_csv(filename, index_col=0, dtype=np.float64)
,则会出现异常:ValueError: could not convert string to float
,因为它试图将第一列解析为float
。
有大量的列,而我没有列名,所以我不想将每一列识别为float
;我想解析每一列除了第一列。
【问题讨论】:
你的号码格式是什么?我很确定 pandas 会在没有任何参数的情况下推断出 dtypes。你试过吗?结果如何? 我会发布一些示例数据......df.convert_objects(convert_numeric=True)
有了dataFrame之后就可以转换值了,
我在 .csv 中找到了一行,其中包含非数字数据,因此整列被解析为字符串。谢谢 juanpa.arrivillaga
【参考方案1】:
获取所有列名的列表,删除第一个。投射其他列。
cols = df.columns
cols.remove('fistcolumn')
for col in cols:
df[col] = df[col].astype(float)
【讨论】:
【参考方案2】:原来的代码是正确的
df = pd.read_csv(filename,index_col=0)
但是.csv
文件的构造不正确。
正如@juanpa.arrivillaga 指出的那样,只要一列中的所有数据都属于相同的dtype
,熊猫就会在没有任何参数的情况下推断dtypes
。这些列被解释为字符串,因为尽管 大多数 数据是数字,但一行包含非数字数据(实际上是日期)。从.csv
中删除这一行解决了这个问题。
【讨论】:
以上是关于将 csv 文件作为浮点数读取到 pandas 数据帧的主要内容,如果未能解决你的问题,请参考以下文章
将 CSV 文件读取到 numpy 数组,第一行为字符串,其余为浮点数