1. ホーム
  2. python

[解決済み] pandas DataFrameのカンマ付き数値文字列をfloatに変換する。

2022-09-22 14:03:12

質問

文字列として数値を含む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です。("cannot convert the series to ", u'occurred at index 0').

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

は別のエラーを出します。

ValueError: ('invalid literal for float(): 1,200', u'インデックス0に発生')

では、これをどのように変換すればよいかというと DataFrame を浮動小数点数のDataFrameに変換するにはどうしたらよいでしょうか?

どのように解決するのですか?

もし、あなたが から読み込んでいる場合 であれば thousands arg :

df.read_csv('foo.tsv', sep='\t', thousands=',')

この方法は、操作を別の手順として実行するよりも効率的であると思われます。


あなたは ロケールを設定する を最初に設定する必要があります。

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