我有一个DataFrame,其中包含数字作为字符串,并带有数千个标记的逗号。我需要将它们转换成浮点数。
a = [['1,200', '4,200'], ['7,000', '-0.03'], [ '5', '0']]
df=pandas.DataFrame(a)
我猜我需要使用locale.atof。确实
df[0].apply(locale.atof)
按预期工作。我得到了一系列漂浮物。
但是当我将它应用于DataFrame时,我收到了一个错误。
df.apply(locale.atof)
TypeError :(“无法将系列转换为”,在索引0处发生')
和
df[0:1].apply(locale.atof)
给出了另一个错误:
ValueError :('float()的文字无效:1,200',u'occurred at index 0')
那么,如何将这个DataFrame
字符串转换为浮动的DataFrame?
答案 0 :(得分:89)
如果您是reading in from csv,那么您可以使用thousands arg:
df.read_csv('foo.tsv', sep='\t', thousands=',')
此方法可能比单独执行操作更有效。
首先需要set the locale:
In [ 9]: import locale
In [10]: from locale import atof
In [11]: locale.setlocale(locale.LC_NUMERIC, '')
Out[11]: 'en_GB.UTF-8'
In [12]: df.applymap(atof)
Out[12]:
0 1
0 1200 4200.00
1 7000 -0.03
2 5 0.00
答案 1 :(得分:15)
您可以使用pandas.Series.str.replace方法:
df.iloc[:,:].str.replace(',', '').astype(float)
此方法可以删除或替换字符串中的逗号。
答案 2 :(得分:0)
df['colname'] = df['colname']..str.replace(',', '').astype(float)
但是您必须一次转换一列