我正在使用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)
感谢任何帮助。
谢谢, 托马斯
答案 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
中使用decimal
和pandas.read_csv
参数。
例如:
pandas.read_csv('data.csv', thousands='.', decimal=',')
来自docs:
数千:
str,可选的千位分隔符。
十进制:
str,默认为“。”识别为小数点的字符 (例如,对于欧洲数据,请使用“,”。