如何使用熊猫read_csv功能有效地处理欧洲小数点分隔符?(How to efficiently

2019-09-20 15:25发布

我使用read_csv读CSV文件到大熊猫的数据帧。 我的CSV文件中包含大量小数/花车。 这些数字是使用欧洲十进制形式编码:

1.234.456,78

这意味着,“” 作为千个为分隔符和“”是小数点。

大熊猫0.8。 提供了一个名为“千人”设置千个为分隔符一个read_csv说法。 有没有提供小数标记以及一个额外的参数? 如果没有,什么是解析EUROPEN风格的十进制数的最effcient方法是什么?

目前我使用的字符串替换,我认为是一个显著性能比较点球。 我使用的编码是这样的:

# 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)

任何帮助表示赞赏。

谢谢,托马斯

Answer 1:

您可以使用converters在千瓦read_csv 。 鉴于/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


Answer 2:

对于欧洲风格的号码,使用thousandsdecimal参数pandas.read_csv

例如:

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

从文档 :

数以千计的

STR,可选的千位分隔符。

十进制

STR,默认的 '' 字符识别(欧洲数据,例如使用“”)作为小数点。



文章来源: How to efficiently handle european decimal separators using the pandas read_csv function?