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
之后,这可能是当前正确答案的重复。