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
对于欧式编号,请使用 中的thousands和decimal参数pandas.read_csv。
例如:
pandas.read_csv('data.csv', thousands='.', decimal=',')
Run Code Online (Sandbox Code Playgroud)
从文档:
千:
str,可选的千位分隔符。
十进制:
str,默认'.' 识别为小数点的字符(例如,对欧洲数据使用“,”)。
你可以使用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)