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

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

DataFrameの欠損値についての取り扱い方法 その4 前後のデータをコピーする

前回↓の続きです。

rafu.hatenablog.jp

前回の終わりに次回予告のようになっていた以下について

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

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

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

テストデータの準備

以下のようなテストデータを準備します。

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 投稿