将 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 数据帧的主要内容,如果未能解决你的问题,请参考以下文章

Python如何将浮点数作为十六进制转换为十进制

将 CSV 文件读取到 numpy 数组,第一行为字符串,其余为浮点数

Python pandas 带有 to_csv 的大浮点数

Hive/Bigsql Pandas 将浮点数转换为整数,使用 pyarrow 将空值转换为镶木地板文件

将日期转换为浮点数以对 Pandas 数据框进行线性回归

Pandas 将 csv 读取为字符串类型