Pandasで同じ値で欠損値を埋める方法 データ処理の基本テクニック

欠損値は、データ分析の現場でよく遭遇する問題です。欠損値が含まれたデータをそのまま分析すると、正確な結果を得ることができません。そのため、欠損値を適切に処理することは非常に重要です。本記事では、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メソッドを使って、欠損値を同じ値で埋める方法を解説しました。欠損値が含まれたデータを分析する際には、欠損値の確認と分析方法を確認することが重要です。また、欠損値を埋める際には、一定の値だけでなく、列ごとに異なる値や条件に応じた値で埋めることもできます。これらの基本的なテクニックを使えば、欠損値を適切に処理することができ、正確な結果を得ることができます。