DataFrameの欠損値についての取り扱い方法 その4 前後のデータをコピーする
前回↓の続きです。
前回の終わりに次回予告のようになっていた以下について
- その列の平均値をいれる
- その列の1個上の値を入れる
- その列の1個下の値を入れる
をまとめていきたいと思います。
テストデータの準備
以下のようなテストデータを準備します。
Japanese | English | math | Science | social studies |
---|---|---|---|---|
100 | NaN | 90 | NaN | 90 |
NaN | 80 | 85 | NaN | 80 |
80 | 92 | 90 | 90 | 85 |
NaN | 90 | 88 | 100 | NaN |
90 | 88 | NaN | 90 | NaN |
実際やってみよう
import numpy as np import pandas as pd data = {"Japanese":[100,np.nan,80,np.nan,90],"English":[np.nan,80,92,90,88],"math":[90,85,90,88,np.nan],"Science":[np.nan,np.nan,90,100,90],"social studies":[90,80,85,np.nan,np.nan]} df = pd.DataFrame(data) print(df)
dfの結果:
Japanese | English | math | Science | social studies | |
---|---|---|---|---|---|
0 | 100 | NaN | 90 | NaN | 90 |
1 | NaN | 80 | 85 | NaN | 80 |
2 | 80 | 92 | 90 | 90 | 85 |
3 | NaN | 90 | 88 | 100 | NaN |
4 | 90 | 88 | NaN | 90 | NaN |
その列の平均値を欠損値にいれてみよう。
欠損値へのデータはfillna()を使ってデータを入れていきます。 平均値と、中央値も同時にまとめてみましょう。
#平均値 df2 = df.fillna(df.mean()) #中央値 df3 = df.fillna(df.median())
df2(平均値)の結果:
赤文字の部分が元NANだった場所です。
Japanese | English | math | Science | social studies | |
---|---|---|---|---|---|
0 | 100.0 | 87.5 | 90.0 | 93.33 | 90.0 |
1 | 90.0 | 80.0 | 85.0 | 93.33 | 80.0 |
2 | 80.0 | 92.0 | 90.0 | 90.0 | 85.0 |
3 | 90.0 | 90.0 | 88.0 | 100.0 | 85.0 |
4 | 90.0 | 88.0 | 88.25 | 90.0 | 85.0 |
df3(中央値)の結果:
Japanese | English | math | Science | social studies | |
---|---|---|---|---|---|
0 | 100.0 | 89.0 | 90.0 | 90.0 | 90.0 |
1 | 90.0 | 80.0 | 85.0 | 90.0 | 80.0 |
2 | 80.0 | 92.0 | 90.0 | 90.0 | 85.0 |
3 | 90.0 | 90.0 | 88.0 | 100.0 | 85.0 |
4 | 90.0 | 88.0 | 89.0 | 90.0 | 85.0 |
きちんと指定された値が入力されたことがわかります。
その列の値を入れてみよう。
以下の3通りのデータを欠損値にいれてみましょう。
- 1つ上のデータ
- 1つ下のデータ
# 欠損値の上の行の値を代入 df_up = df.fillna(method = "ffill") # 欠損値の下の行の値を代入 df_down = df.fillna(method = "bfill")
df_upの結果:
Japanese | English | math | Science | social studies | |
---|---|---|---|---|---|
0 | 100.0 | NAN | 90.0 | NAN | 90.0 |
1 | 100.0 | 80.0 | 85.0 | NAN | 80.0 |
2 | 80.0 | 92.0 | 90.0 | 90.0 | 85.0 |
3 | 80.0 | 90.0 | 88.0 | 100.0 | 85.0 |
4 | 90.0 | 88.0 | 88.0 | 90.0 | 85.0 |
欠損値の上に行がない場合は欠損値データのままになりました。
また、NANの上がNANのものも欠損値のままになりました。
df_downの結果:
Japanese | English | math | Science | social studies | |
---|---|---|---|---|---|
0 | 100.0 | 80.0 | 90.0 | 90.0 | 90.0 |
1 | 80.0 | 80.0 | 85.0 | 90.0 | 80.0 |
2 | 80.0 | 92.0 | 90.0 | 90.0 | 85.0 |
3 | 90.0 | 90.0 | 88.0 | 100.0 | NAN |
4 | 90.0 | 88.0 | NAN | 90.0 | NAN |
欠損値の下に行がない場合、欠損値データのままになりました。
また、NANの下の行がNANのものも欠損値のままになりました。
<最終更新日:2021/10/01>
2021/10/01 投稿