🙂

欠損値の処理方法

2024/01/06に公開

欠損値とは

データセット内に全ての情報が揃っていない状況です。

欠損値があるかどうかの確認方法

Pandasライブラリの isna() 関数と sum() 関数を組み合わせて、下記のようなコードを使うと、欠損値を確認できます。

# 各列における欠損値の数を確認
missing_values = data.isna().sum()
print(missing_values)

欠損値がある場合は、0ではない数字が表示されます。
【欠損値がある場合】

欠損値を埋める方法

欠損値を埋める方法はいくつかあります。

前方補填(Forward Fill)

前方補填は、欠損値の直前の値を使用して穴を埋める方法です。

data.ffill(inplace=True)

後方補填(Backward Fill)

後方補填は、欠損値の直後の値を使用して穴を埋める方法です。

data.bfill(inplace=True)

平均値での補填

数値データの場合、列の平均値で欠損値を埋めることができます。

mean_value = data['column_name'].mean()
data['column_name'].fillna(mean_value, inplace=True)

中央値での補填

数値データにおいて外れ値がある場合、列の中央値で欠損値を埋めることが推奨されます。

mean_value = data['column_name'].median()
data['column_name'].fillna(mean_value, inplace=True)

うまくいかない時の対処法

ひとつの方法ではうまくいかないこともあります。たとえばデータセットの最初の行が欠損している場合、前方補填(ffill)では直前の値が存在しないため、欠損値を埋めることができません。このような場合、以下のように複数の手法を組み合わせることで、処理が可能になります。

# 前方補填を試みる
data.ffill(inplace=True)
# 前方補填で埋められなかった欠損値を後方補填で処理する
data.bfill(inplace=True)

古い方法

下記のコードを使うと、"FutureWarning: DataFrame.fillna with 'method' is deprecated and will raise in a future version. Use obj.ffill() or obj.bfill() instead." とエラーになります。

data.fillna(method='ffill')

methodは、今後のバージョンでは非推奨となるためです。使用を避けておきましょう。

さいごに

欠損値があると、エラーが起こったりします。前処理を行った後に欠損値を確認し、欠損値があれば、上記の方法で埋めておくようにしましょう。
記事が参考になれば嬉しいです^^

Discussion