pandasで欠損値まとめ

欠損値の取り扱い

実世界のデータが、チュートリアルと異なっているのは、データが雑然としていて均質でもないという点です。 特に、興味深いデータセットの多くは、一定量の欠落データが存在しています。

欠損値がある場合の処理

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
'''