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

THM*_*THM 5 python csv decimal pandas

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

1.234.456,78
Run Code Online (Sandbox Code Playgroud)

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

大熊猫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)
Run Code Online (Sandbox Code Playgroud)

任何帮助表示赞赏.

谢谢,托马斯

jos*_*hlk 12

对于欧式编号,请使用 中的thousandsdecimal参数pandas.read_csv

例如:

pandas.read_csv('data.csv', thousands='.', decimal=',')
Run Code Online (Sandbox Code Playgroud)

文档

str,可选的千位分隔符。

十进制

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

  • 在 Pandas 将这两个参数引入“read_csv”和“to_csv”之后,这是当前的正确答案。 (2认同)

lbo*_*lla 8

你可以使用converterskw read_csv.给出/tmp/data.csv这样的:

"x","y"                                                                         
"one","1.234,56"                                                                
"two","2.000,00"   
Run Code Online (Sandbox Code Playgroud)

你可以做:

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
Run Code Online (Sandbox Code Playgroud)