機械学習するためのデータの欠損値(NaN)を置換する方法のメモ。
ある列の欠損値を全て同じ値で置換するだけであればfillna()を使用すれば簡単にできるが、別の列の値によって置換する欠損値を変えたい場合は少し工夫が必要。
<例>
KaggleのTitanicチュートリアルのデータで、年齢の欠損値を平均値で置換する。
(A)全ての欠損値を全体の平均値で置換する場合
import pandas as pd
# データの読み込み
train = pd.read_csv("train.csv")
# 年齢の欠損値を全体の平均値で置換
train.loc[:,"Age"] = train["Age"].fillna(train["Age"].mean())
(B)性別(Sex)が男(male)の行の欠損値を男性の平均値で置換する場合
import pandas as pd
# データの読み込み
train = pd.read_csv("train.csv")
# 男性の欠損値を男性の平均値で置換
train.loc[(train["Sex"].values == "male") & (train["Age"].isnull()), "Age"] = train.query("Sex == 'male'")["Age"].mean()