我试图读取包含数百个浮点列的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方式将所有列导入为浮动并同时处理'。'和','字符为十进制标记?
答案 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