Python 如何使用pandas read_csv函数有效地处理欧洲十进制分隔符?

Python 如何使用pandas read_csv函数有效地处理欧洲十进制分隔符?,python,csv,decimal,pandas,Python,Csv,Decimal,Pandas,我正在使用read\u csv将csv文件读取到熊猫数据帧中。我的CSV文件包含大量小数/浮点数。数字采用欧洲十进制表示法进行编码: 1.234.456,78 这意味着“.”用作千位分隔符,“.”是小数点 熊猫0.8。提供名为“千”的read\u csv参数来设置千分隔符。是否还有其他参数提供小数点?如果没有,解析欧式十进制数的最有效方法是什么 目前我使用的是字符串替换,我认为这是一个重要的性能损失。我使用的编码如下: # Convert to float data type and chan

我正在使用
read\u csv
将csv文件读取到熊猫数据帧中。我的CSV文件包含大量小数/浮点数。数字采用欧洲十进制表示法进行编码:

1.234.456,78
这意味着“.”用作千位分隔符,“.”是小数点

熊猫0.8。提供名为“千”的
read\u 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)

非常感谢您的帮助。

您可以在
read\u 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

对于欧式数字,请使用
pandas.read_csv
中的
数千
decimal
参数

例如:

pandas.read_csv('data.csv',千位=',十进制=','))
从:

千人

str,可选的千位分隔符

十进制

str,要识别为小数点的默认“.”字符 (例如,使用“,”表示欧洲数据)


谢谢,它起作用了。我不确定转换器函数是否比string.replace快。探查器将告诉您。;-)速度可能是相同的,但使用
转换器
可以指定列的类型。请注意,这在Git上的公开发行584和781中提到过。在Pandas将这两个参数引入
read_csv
to_csv
之后,这可能是当前正确答案的重复。