LoginSignup
5

More than 3 years have passed since last update.

Pandas 最頻値による欠損値補完

Last updated at Posted at 2019-06-15

Pandas 欠損値の最頻値による置換

欠損値(nan)を中央値、平均値、最頻値などで置き換えますが、最頻値での置換にちょっと躓いたので、メモを残したいと思います。

まずはデータフレームを以下のように定義

df = pd.DataFrame(["東","西","南","北","北",np.nan], columns=["方位"])
方位
0
1 西
2
3
4
5 NaN

mode()を使って確かめてみると、最頻値は"北"です。

df["方位"].mode()
方位
0

中央値、平均値と同じ要領でfillna()を使うと

df.fillna(df["方位"].mode())

エラーにはなりませんが、更新できていません。

方位
0
1 西
2
3
4
5 NaN

原因はこれです。

type(df["方位"].mode())
pandas.core.series.Series

最頻値の場合、平均値や中央値と違って、複数の値を返す可能性があるため、戻り値は
- DataFrame渡しの場合は、DataFrame
- Series渡しの場合は、Series
が返ってきます。

df.fillna(df["方位"].mode()[0])

そのため、明示的にインデックス番号を指定してあげなければなりませんでした。
これで無時に更新できました。

方位
0
1 西
2
3
4
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
5