将PandasDataFrame中带逗号的数字字符串转换为浮点型

tv6aics1  于 2023-01-11  发布在  其他
关注(0)|答案(4)|浏览(162)

我有一个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:(““无法将序列转换为“”,u“出现在索引0”处)
以及

df[0:1].apply(locale.atof)

给出另一个错误:
ValueError:('float()的文字无效:1,200 ',u'出现在索引0 '处)
那么,如何将这个DataFrame字符串转换为一个DataFrame浮点数呢?

xcitsw88

xcitsw881#

如果您是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
k2fxgqgv

k2fxgqgv2#

您可以像这样一次转换一列:

df['colname'] = df['colname'].str.replace(',', '').astype(float)
pobjuy32

pobjuy323#

您可以使用panda.Series.str.replace方法:

df.iloc[:,:].str.replace(',', '').astype(float)

此方法可以移除或替换字符串中的逗号。

eh57zj3b

eh57zj3b4#

这将适用于字符串,如“-55,00”或“5.500,00”,并将它们分别转换为浮点数-55.00和5500.00。

df['colname'] = df['colname'].str.replace('.','', regex=True).str.replace(',', '.', regex=True).astype(float)

相关问题