欠損値の取り扱い
実世界のデータが、チュートリアルと異なっているのは、データが雑然としていて均質でもないという点です。 特に、興味深いデータセットの多くは、一定量の欠落データが存在しています。
欠損値がある場合の処理
isnull() 欠損値の存在を示すブール値マスク配列を作成する
notnull() isnull()の逆
dropna() データから欠損値を取り除いたデータを作る
fillna() 不足している要素に値を埋め込んだデータをコピーに返す。
isnull():null値をTrue
#null値の検出
data = pd.DataFrame([[1, np.nan, 3,],
[2, 3, 4],
[np.nan, 4, 5]])
print(data.isnull())
'''
[out]
0 1 2
0 1.0 NaN 3
1 2.0 3.0 4
2 NaN 4.0 5
0 1 2
0 False True False
1 False False False
2 True False False
'''
notnull():null値をFalse
#null値の検出
data = pd.DataFrame([[1, np.nan, 3,],
[2, 3, 4],
[np.nan, 4, 5]])
print(data.notnull())
'''
[out]
0 1 2
0 1.0 NaN 3
1 2.0 3.0 4
2 NaN 4.0 5
0 1 2
0 True False True
1 True True True
2 False True True
'''
dropna()
デフォルトで、null値が含まれる行を削除する
軸を選択(axis=1)で、null値が含まれる列を削除する
全てnull値の行または、列を削除する場合は、how=’all’と追加する。
#null値の検出
data = pd.DataFrame([[1, np.nan, 3,],
[2, np.nan, 4],
[np.nan, np.nan, 5]])
#行
print(data.dropna())
#列
print(data.dropna(axis=1))
#全てnull値
print(data.dropna(axis=1, how='all'))
fillna():null値の代入
data = pd.DataFrame([[1, np.nan, 3,],
[2, np.nan, 4],
[np.nan, np.nan, 5]])
#null値の要素すべて0で代入
print(data.fillna(0))
#欠損値の要素に対して、1つ後ろの値を埋めるmethod='bfill'
print(data.fillna(method='bfill', axis='columns'))
欠損データの数を調べる
data = pd.DataFrame([[1, np.nan, 3,],
[2, np.nan, 4],
[np.nan, np.nan, 5]],
columns=['a', 'b', 'c'])
print(data.isnull().sum())
'''
[out]
a b c
0 1.0 NaN 3
1 2.0 NaN 4
2 NaN NaN 5
a 1
b 3
c 0
'''