如何将str转换为pandas数据帧中的float

时间:2016-05-28 19:54:55

标签: python csv pandas typeconverter

我使用下面的行来读取一个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)

1 个答案:

答案 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