我使用下面的行来读取一个csv文件,其中列B以str格式结束,我无法直接将其转换为float:
df = pd.read_csv('data.csv', sep=";", encoding = "ISO-8859-1")
这会生成一个数据框,其中所有列都是str格式:
A B
0 Emma -20,50
1 Filo -15,75
2 Theo 17,23
您可能会注意到小数由'分隔,'而不是'而不是'因为它是德国的csv。 我已经尝试了以下(无济于事):
..., dtype={'B': np.float32}, decimal= ',' , ....
知道如何在阅读过程中完成它吗?
在阅读csv之后进行修改工作(但这是我想避免的一个低效的额外步骤),这就是我使用的:
df['B'] = df['B'].str.replace(',', '.').astype(float)
答案 0 :(得分:0)
对我来说它很好用,我只省略了dtype={'B': np.float32}
:
import pandas as pd
import io
temp=u"""A;B
0;Emma;-20,50
1;Filo;-15,75
2;Theo;17,23"""
#after testing replace io.StringIO(temp) to filename
df = pd.read_csv(io.StringIO(temp), sep=";", encoding = "ISO-8859-1", decimal= ',')
print (df)
A B
0 Emma -20.50
1 Filo -15.75
2 Theo 17.23
print (df.dtypes)
A object
B float64
dtype: object
编辑:
我认为问题可能是一些小数点.
和一些,
,然后使用converters
:
import pandas as pd
import io
temp=u"""A;B
0;Emma;-20,50
1;Filo;-15.75
2;Theo;17,23"""
def converter(x):
return float(x.replace(',','.'))
#define each column
converters={'B': converter}
#after testing replace io.StringIO(temp) to filename
df = pd.read_csv(io.StringIO(temp),
sep=";",
encoding = "ISO-8859-1",
converters=converters)
print (df)
0 Emma -20.50
1 Filo -15.75
2 Theo 17.23
print (df.dtypes)
A object
B float64
dtype: object