欠損値は、データ分析の現場でよく遭遇する問題です。欠損値が含まれたデータをそのまま分析すると、正確な結果を得ることができません。そのため、欠損値を適切に処理することは非常に重要です。本記事では、Pandasのfillnaメソッドを使って、欠損値を同じ値で埋める方法を解説します。
欠損値の確認と分析方法
まず、欠損値が含まれたデータを分析する前に、欠損値の確認と分析方法を確認しておきましょう。
Pandasを使って、欠損値が含まれたデータを読み込んでみます。
import pandas as pd df = pd.read_csv('data.csv') print(df.head())
出力:
name age sex 0 A 20.0 M 1 B NaN F 2 C 25.0 M 3 D NaN F 4 E 30.0 M
上記のように、age列には欠損値が含まれています。欠損値の確認方法として、Pandasのisnullメソッドを使います。
print(df.isnull())
出力:
name age sex 0 False False False 1 False True False 2 False False False 3 False True False 4 False False False
上記のように、isnullメソッドはデータフレームの各要素が欠損値かどうかを判定してTrue/Falseのブール値を返します。また、欠損値が含まれている列を確認するには、anyメソッドを使います。
print(df.isnull().any())
出力:
name False age True sex False dtype: bool
上記のように、anyメソッドは各列において欠損値が含まれているかどうかを判定し、結果をシリーズ形式で返します。Trueが含まれている列が欠損値を含む列です。
fillnaメソッドを使って欠損値を一定の値で埋める方法
fillnaメソッドを使えば、欠損値を一定の値で埋めることができます。
例えば、age列の欠損値をゼロで埋めたい場合は、以下のように記述します。
df['age'].fillna(0, inplace=True) print(df)
出力:
name age sex 0 A 20.0 M 1 B 0.0 F 2 C 25.0 M 3 D 0.0 F 4 E 30.0 M
上記のように、fillnaメソッドに欠損値を埋める値を指定します。ここでは、age列の欠損値をゼロで埋めています。また、inplace=Trueを指定することで、元のデータフレームを変更しています。
列ごとに異なる値で欠損値を埋める方法
列ごとに異なる値で欠損値を埋めたい場合は、fillnaメソッドに列ごとに異なる値を指定します。
例えば、age列の欠損値を、平均値で、sex列の欠損値を”Unknown”で埋めたい場合は、以下のように記述します。
data = {'name': ['A', 'B', 'C', 'D', 'E'], 'age': [20.0, float('nan'), 25.0, float('nan'), 30.0], 'sex': ['M', 'F', 'M', 'F', float('nan')]} df = pd.DataFrame(data)
mean_age = df['age'].mean() df.fillna({'age': mean_age, 'sex': 'Unknown'}, inplace=True) print(df)
出力:
name age sex 0 A 20.0 M 1 B 25.0 F 2 C 25.0 M 3 D 25.0 F 4 E 30.0 Unknown
上記のように、fillnaメソッドに辞書形式で欠損値を埋める値を指定します。ここでは、age列の欠損値を平均値で、sex列の欠損値を”Unknown”で埋めています。
欠損値を埋める際の条件指定方法
fillnaメソッドを使う際に、条件を指定して欠損値を埋めることもできます。
例えば、以下の処理ではAが3以上のBのデータの欠損値を0で埋めています。
# サンプルのDataFrameを作成 df = pd.DataFrame({'A': [1, 2, np.nan, 4, 5], 'B': [np.nan, 10, 20, 30, np.nan], 'C': [100, 200, 300, 400, 500]}) # 欠損値を埋める条件を指定 condition = df['A'] > 3 # 指定した条件に基づいて欠損値を埋める df.loc[condition, 'B'] = df.loc[condition, 'B'].fillna(0)
出力:
A B C 0 1.0 NaN 100 1 2.0 10.0 200 2 NaN 20.0 300 3 4.0 30.0 400 4 5.0 0.0 500
上記のように、fillnaメソッドに欠損値を埋める値を指定する前に、条件式を使って欠損値を埋める列の条件を指定します。また、locメソッドを使って条件式に該当するデータにアクセスしています。
まとめ
本記事では、Pandasのfillnaメソッドを使って、欠損値を同じ値で埋める方法を解説しました。欠損値が含まれたデータを分析する際には、欠損値の確認と分析方法を確認することが重要です。また、欠損値を埋める際には、一定の値だけでなく、列ごとに異なる値や条件に応じた値で埋めることもできます。これらの基本的なテクニックを使えば、欠損値を適切に処理することができ、正確な結果を得ることができます。