如何使用pandas read_csv函数有效地处理欧洲小数分隔符?

时间:2012-08-01 16:04:16

标签: python csv decimal pandas

我正在使用read_csv将CSV文件读入pandas数据框。我的CSV文件包含大量小数/浮点数。这些数字使用欧洲十进制表示法编码:

1.234.456,78

这意味着'。'用作千位分隔符,','是小数点。

大熊猫0.8。提供一个名为“千位”的read_csv参数来设置千位分隔符。还有一个额外的参数来提供小数点吗?如果不是,解析欧式十进制数的最有效方法是什么?

目前我正在使用字符串替换,我认为这是一个重要的性能惩罚。我正在使用的编码是:

# Convert to float data type and change decimal point from ',' to '.'
f = lambda x: string.replace(x, u',', u'.')
df['MyColumn'] = df['MyColumn'].map(f)

感谢任何帮助。

谢谢, 托马斯

2 个答案:

答案 0 :(得分:8)

您可以在converters中使用read_csv kw。鉴于此/tmp/data.csv

"x","y"                                                                         
"one","1.234,56"                                                                
"two","2.000,00"   

你可以这样做:

In [20]: pandas.read_csv('/tmp/data.csv', converters={'y': lambda x: float(x.replace('.','').replace(',','.'))})
Out[20]: 
     x        y
0  one  1234.56
1  two  2000.00

答案 1 :(得分:0)

对于欧洲风格编号,请在thousands中使用decimalpandas.read_csv参数。

例如:

pandas.read_csv('data.csv', thousands='.', decimal=',')

来自docs

  

数千

     

str,可选的千位分隔符。

     

十进制

     

str,默认为“。”识别为小数点的字符   (例如,对于欧洲数据,请使用“,”。