DataFrameの欠損値についての取り扱い方法 その3 置き換える
前回までは欠損値を削除する方法をまとめました。
今回は欠損値をあるデータに置き換える(穴埋めする)
という方法をまとめていきたいと思います。
欠損値を置き換えるとは?
欠損値に何か仮の値を入れるということですね。
例えば・・・
- 欠損値全てに「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 投稿