用pandas DataFrame中的逗号将数字字符串转换为float

时间:2014-03-03 02:37:02

标签: python pandas

我有一个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?

3 个答案:

答案 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)

但是您必须一次转换一列