1. ホーム
  2. パイソン

[解決済み】pandas DataFrame: nan 値を列の平均値に置き換える

2022-04-04 16:13:32

質問

pandasのDataFrameは、ほとんどが実数で埋まっていますが、いくつか nan の値も含まれています。

を置き換えるにはどうしたらよいでしょうか。 nan を列の平均値で置き換えることができますか?

この質問とよく似ていますね。 numpy の配列: nan 値を列の平均に置き換える しかし、残念ながら、そこで示された解決策は、pandas DataFrameではうまくいきません。

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

を使うだけです。 DataFrame.fillna を埋めるために nan を直接指定します。

In [27]: df 
Out[27]: 
          A         B         C
0 -0.166919  0.979728 -0.632955
1 -0.297953 -0.912674 -1.365463
2 -0.120211 -0.540679 -0.680481
3       NaN -2.027325  1.533582
4       NaN       NaN  0.461821
5 -0.788073       NaN       NaN
6 -0.916080 -0.612343       NaN
7 -0.887858  1.033826       NaN
8  1.948430  1.025011 -2.982224
9  0.019698 -0.795876 -0.046431

In [28]: df.mean()
Out[28]: 
A   -0.151121
B   -0.231291
C   -0.530307
dtype: float64

In [29]: df.fillna(df.mean())
Out[29]: 
          A         B         C
0 -0.166919  0.979728 -0.632955
1 -0.297953 -0.912674 -1.365463
2 -0.120211 -0.540679 -0.680481
3 -0.151121 -2.027325  1.533582
4 -0.151121 -0.231291  0.461821
5 -0.788073 -0.231291 -0.530307
6 -0.916080 -0.612343 -0.530307
7 -0.887858  1.033826 -0.530307
8  1.948430  1.025011 -2.982224
9  0.019698 -0.795876 -0.046431

のdocstringは fillna にはこうあります。 value はスカラーかディクショナリーでなければなりません。 Series もあります。もしdictを渡したい場合は df.mean().to_dict() .