1. ホーム
  2. パイソン

[解決済み】Pandas DataframeのカラムでNaN値をゼロに置き換えるには?

2022-04-29 03:09:23

質問

以下のようなPandasのDataframeがあります。

      itm Date                  Amount 
67    420 2012-09-30 00:00:00   65211
68    421 2012-09-09 00:00:00   29424
69    421 2012-09-16 00:00:00   29877
70    421 2012-09-23 00:00:00   30990
71    421 2012-09-30 00:00:00   61303
72    485 2012-09-09 00:00:00   71781
73    485 2012-09-16 00:00:00     NaN
74    485 2012-09-23 00:00:00   11072
75    485 2012-09-30 00:00:00  113702
76    489 2012-09-09 00:00:00   64731
77    489 2012-09-16 00:00:00     NaN

Amount列に関数を適用しようとすると、以下のエラーが発生します。

ValueError: cannot convert float NaN to integer

Mathモジュールの.isanを使用して関数を適用してみました。 pandas .replace 属性を試しました。 pandas 0.9の.sparse data属性を試してみました。 関数内のif NaN == NaN文も試しました。 この記事も見てみました RデータフレームでNA値をゼロに置き換えるには? 他の記事も見たりしながら。 私が試した方法はすべてうまくいかなかったか、NaNを認識しませんでした。 何かヒントや解決策があれば、教えてください。

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

私が思うに DataFrame.fillna() がやってくれるでしょう。

のDocsへのリンク データフレーム シリーズ .

In [7]: df
Out[7]: 
          0         1
0       NaN       NaN
1 -0.494375  0.570994
2       NaN       NaN
3  1.876360 -0.229738
4       NaN       NaN

In [8]: df.fillna(0)
Out[8]: 
          0         1
0  0.000000  0.000000
1 -0.494375  0.570994
2  0.000000  0.000000
3  1.876360 -0.229738
4  0.000000  0.000000

この場合、dfの内容を実際に変更するためにinplace=Trueを使用しています。

In [12]: df[1].fillna(0, inplace=True)
Out[12]: 
0    0.000000
1    0.570994
2    0.000000
3   -0.229738
4    0.000000
Name: 1

In [13]: df
Out[13]: 
          0         1
0       NaN  0.000000
1 -0.494375  0.570994
2       NaN  0.000000
3  1.876360 -0.229738
4       NaN  0.000000

EDITです。

を回避するために SettingWithCopyWarning を使用する場合は、組み込みの列固有の機能を使用してください。

df.fillna({1:0}, inplace=True)