欠損値の対応 欠損値の除去

機械学習ではアルゴリズムへ入力する前にデータセットを精査し、以下のように前処理することでデータの品質をあげることが大切です。

欠測値を削除、補填する
文字列を対応する数値に置き換える
数値を標準化する

欠損値の確認

#行・列ごとに欠損値をひとつでも含むか判定
print(df.isnull().any()) 列
# name     True
# age      True
# state    True
# dtype: bool

print(df.isnull().any(axis=1)) 行に対して
# 0    True
# 1    True
# 2    True
# dtype: bool
#行・列ごとに欠損値の個数をカウント
print(df.isnull().sum())
# name     1
# age      2
# state    1
# dtype: int64

print(df.isnull().sum(axis=1))
# 0    2
# 1    5
# 2    3
# dtype: int64

sum()ではTrue=1, False=0として処理されるため、sum()をisnull()の結果に適用することで、行・列ごとに欠損値NaNの個数をカウントできる。

#行・列ごとに欠損値でない要素の個数をカウント
print(df.count())
# name     2
# age      1
# state    2

# dtype: int64

print(df.count(axis=1))
# 0    3
# 1    0
# 2    2
# dtype: int64

count()は行・列ごとに欠損値NaNでない要素の個数をカウントするメソッド。pandas.DataFrameから呼ぶとpandas.Seriesを返す。

欠損値の除去

import pandas as pd
df = pd.read_csv('./input/data1.csv')

# 全データの表示
df
# 欠損値(NaN) を含む"行"を削除
df1 = df.dropna()
df1
# 欠損値(NaN) を含む"列"を削除
df2 = df.dropna(axis=1)
df2
# 欠損値(NaN)ではない値が4つ未満の"行"を削除
df3 = df.dropna(thresh=4)  # 亀子が消える
df3
# 特定の列(身長)に欠損値(NaN)を含む"行"を削除
df4 = df.dropna(subset=["身長(cm)"])
df4

dropna解説

# 欠損値(NaN) を含む"行"を削除
df.dropna()

元になるデータセットから、欠損値(NaN)を除去してくれます。

コメント

タイトルとURLをコピーしました