Python - pandas - 是否可以读取带有多个小数点的csv

时间:2017-09-20 10:54:30

标签: python pandas csv decimal

我试图读取包含数百个浮点列的csv文件。他们中的一半人有'。'作为十进制标记,其他人有','作为十进制标记,并且它们都没有任何千位分隔符,因此如果可以将pd.read_csv中的十进制参数设置为','或'。'但似乎此参数仅支持length-1十进制标记。 我的列中只有一半是在float dtype的数据框中导入的。后半部分是Object dtype,必须单独处理才能转换为float。

>>> import pandas as pd
>>> df0 = pd.read_csv('example.csv')
>>> df0.head()
    col1   col2
0  123,2  12.02
1  22,15   1.50
>>> df0.dtypes
col1     object
col2    float64
dtype: object
>>> df1 = pd.read_csv('example.csv', decimal=',')
>>> df1.head()
     col1   col2
0  123.20  12.02
1   22.15    1.5
>>> df1.dtypes
col1    float64
col2     object
dtype: object

==>是否有任何pythonesque方式将所有列导入为浮动并同时处理'。'和','字符为十进制标记?

2 个答案:

答案 0 :(得分:1)

在阅读文件之前,请使用:

with open("example.csv") as f:
    content = f.read()

content = content.replace('","','###')    #To prevent deleting required commas
content = content.replace(',','.')
content = content.replace('###','","')

with open("example.csv", "w") as f:
    content = f.write(content)

答案 1 :(得分:0)

您可以选择objects并将其转换为float

obj = df0.select_dtypes(include=['object']).apply(lambda x: x.apply(lambda y: float(y.replace(',', '.'))))
df0[obj.columns] = obj