欠損値の取り扱い
実世界のデータが、チュートリアルと異なっているのは、データが雑然としていて均質でもないという点です。 特に、興味深いデータセットの多くは、一定量の欠落データが存在しています。
欠損値がある場合の処理
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 '''