Pandas でダミーを取得

Suraj Joshi 2023年1月30日
  1. pandas.get_dummies() メソッド
  2. pandas.get_dummies() メソッドを用いてダミー変数の列を持つ DataFrame を作成する
  3. 指定したカラムのみにダミー変数を作成するように columns を設定する
  4. prefix でダミーカラムのデフォルト名を変更する
Pandas でダミーを取得

このチュートリアルでは、カテゴリ列を持つ DataFrame からダミー変数や指標変数を用いて DataFrame を生成する方法を説明します。

pandas.get_dummies() メソッド

pandas.get_dummies(
    data,
    prefix=None,
    prefix_sep="_",
    dummy_na=False,
    columns=None,
    sparse=False,
    drop_first=False,
    dtype=None,
)

pandas.get_dummies() メソッドを用いてダミー変数の列を持つ DataFrame を作成する

import pandas as pd

students_df = pd.DataFrame(
    {
        "Id": [302, 504, 708, 103, 303],
        "Name": ["Mike", "Christine", "Rob", "Daniel", "Jennifer"],
        "Sex": ["Male", "Female", "Male", "Male", "Female"],
    }
)

students_df_dummies = pd.get_dummies(students_df)

print("The original DataFrame is:")
print(students_df, "\n")

print("DataFrame with Dummies:")
print(students_df_dummies)

出力:

The original DataFrame is:
    Id       Name     Sex
0  302       Mike    Male
1  504  Christine  Female
2  708        Rob    Male
3  103     Daniel    Male
4  303   Jennifer  Female 

DataFrame with Dummies:
    Id  Name_Christine  Name_Daniel  Name_Jennifer  Name_Mike  Name_Rob  Sex_Female  Sex_Male
0  302               0            0              0          1         0           0         1
1  504               1            0              0          0         0           1         0
2  708               0            0              0          0         1           0         1
3  103               0            1              0          0         0           0         1
4  303               0            0              1          0         0           1         0

元のカラム名とそのカラムに固有の値を連結したダミーのカラム名を持つ DataFrame を生成します。

Name カラムには 5つのユニークな値があるので、NameName_ に加えて DataFrame 内の各ユニークな名前に分割されます。ダミーカラムの値は、初期の DataFrame の値に基づいて 1 または 0 になります。

students_df DataFrame の Name カラム Daniel の値を持つ行は、students_df_dummies DataFrame の Name_Daniel カラムの値が 1 になり、それ以外のすべての名前の値は students_df_dummies DataFrame の Name_Daniel カラムの値が 0 になります。

指定したカラムのみにダミー変数を作成するように columns を設定する

デフォルトでは、get_dummies() メソッドは objectcategory という dtypes を持つ各カラムに対してダミーのカラムを持つ DataFrame を作成します。カラムのリストを columns 引数に渡すことで、特定のカラムを指定することができます。

import pandas as pd

students_df = pd.DataFrame(
    {
        "Id": [302, 504, 708, 103, 303],
        "Name": ["Mike", "Christine", "Rob", "Daniel", "Jennifer"],
        "Sex": ["Male", "Female", "Male", "Male", "Female"],
    }
)

students_df_dummies = pd.get_dummies(students_df, columns=["Sex"])

print("The original DataFrame is:")
print(students_df, "\n")

print("DataFrame with Dummies:")
print(students_df_dummies)

出力:

The original DataFrame is:
    Id       Name     Sex
0  302       Mike    Male
1  504  Christine  Female
2  708        Rob    Male
3  103     Daniel    Male
4  303   Jennifer  Female 

DataFrame with Dummies:
    Id       Name  Sex_Female  Sex_Male
0  302       Mike           0         1
1  504  Christine           1         0
2  708        Rob           0         1
3  103     Daniel           0         1
4  303   Jennifer           1         0

Sex カラムのみを対象としたダミー変数を生成します。

prefix でダミーカラムのデフォルト名を変更する

import pandas as pd

students_df = pd.DataFrame(
    {
        "Id": [302, 504, 708, 103, 303],
        "Name": ["Mike", "Christine", "Rob", "Daniel", "Jennifer"],
        "Sex": ["Male", "Female", "Male", "Male", "Female"],
    }
)

students_df_dummies = pd.get_dummies(students_df, columns=["Sex"], prefix="Column")

print("The original DataFrame is:")
print(students_df, "\n")

print("DataFrame with Dummies:")
print(students_df_dummies)

出力:

The original DataFrame is:
    Id       Name     Sex
0  302       Mike    Male
1  504  Christine  Female
2  708        Rob    Male
3  103     Daniel    Male
4  303   Jennifer  Female 

DataFrame with Dummies:
    Id       Name  Column_Female  Column_Male
0  302       Mike              0            1
1  504  Christine              1            0
2  708        Rob              0            1
3  103     Daniel              0            1
4  303   Jennifer              1            0

Sex カラムから生成されたダミーカラムの接頭辞を Column に設定します。これで、ダミーのカラム名は Column_FemaleColumn_Male になります。

著者: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn

関連記事 - Pandas DataFrame Column