らふのプログラミングメモ

プログラミングメモです。

DataFrameの欠損値についての取り扱い方法 その3 置き換える

前回までは欠損値を削除する方法をまとめました。

rafu.hatenablog.jp

rafu.hatenablog.jp

今回は欠損値をあるデータに置き換える(穴埋めする)
という方法をまとめていきたいと思います。

パネル:DataFrameの欠損値にデータを穴埋めしてみよう。
DataFrameの欠損値にデータを穴埋めしてみよう。

欠損値を置き換えるとは?

欠損値に何か仮の値を入れるということですね。

例えば・・・

  • 欠損値全てに「0」を入れる
  • 列ごとに欠損値に穴埋めする値を変更する。
  • その列の平均値をいれる
  • その列の1個上の値を入れる
  • その列の1個下の値を入れる
  • その列の上下1個ずつの平均値をいれる。

などなど・・・

色々ありますが、これらはfillna()メソッドを使えば解決できそうです。

今回は上の2つ

  • 欠損値全てに「0」を入れる
  • 列ごとに欠損値に穴埋めする値を変更する。

こちらをまとめていきたいと思います。

ということで、さっそくやってみましょう!

今回のテストデータは

以下の欠損値がたくさんあるデータを使っていきたいと思います。
(名前や住所にまで欠損値あります)

name age add English math
0 aaa Nan Tokyo 80 90
1 bbb 20 Osaka 85 80
2 ccc 22 Nagoya 90 85
3 NaN 20.0 NaN 100 80
4 EEE 18.0 NaN 90 90
data = {"name":["aaa","bbb","ccc",np.nan,"EEE"],"age":[np.nan,20,22,20,18],"add":["Tokyo","Osaka","Nagoya",np.nan,np.nan],"English":[80,85,90,100,90],"math":[90,80,85,80,90]}

df = pd.DataFrame(data)

#まずは全てを0にしてみましょう。
df_0 = df.fillna(0)

print(df_0)

df_0の結果:

name age add English math
0 aaa 0.0 Tokyo 80 90
1 bbb 20 Osaka 85 80
2 ccc 22 Nagoya 90 85
3 0 20.0 0 100 80
4 EEE 18.0 0 90 90

名前、年齢、住所にあった欠損値が全て「0」に置き換わりました。

列ごとに欠損値に埋める値を変えてみよう

名前や住所に「0」というのはおかしい感じがしますよね。

というわけで、今回は以下のように欠損値を埋めたいと思います。

  • 名前:No_name
  • 住所:Japan
  • 年齢:0

ということで、やってみましょう。

df_0_new = df2.fillna({"name":"No_name","age":0,"add":"Japan"})

print(df_0_new)

df_0_newの結果:

name age add English math
0 aaa 0.0 Tokyo 80 90
1 bbb 20.0 Osaka 85 80
2 ccc 22.0 Nagoya 90 85
3 No_name 20.0 Japan 100 80
4 EEE 18.0 Japan 90 90

このように列ごとに指定した通りの穴埋めを行うことができました。

次回は

  • その列の平均値をいれる
  • その列の1個上の値を入れる
  • その列の1個下の値を入れる
  • その列の上下1個ずつの平均値をいれる。

をまとめていきたいと思います。


<最終更新日:2021/09/27>
2021/09/27 投稿