機械学習ではアルゴリズムへ入力する前にデータセットを精査し、以下のように前処理することでデータの品質をあげることが大切です。
欠測値を削除、補填する
文字列を対応する数値に置き換える
数値を標準化する
欠損値の確認
#行・列ごとに欠損値をひとつでも含むか判定
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)を除去してくれます。
コメント