pandas.Series.str.get_dummies() 関数


pandas.Series.str.get_dummies() 関数

pandas.Series.str.get_dummies() 関数は、カテゴリカル変数をダミー変数に変換するために使用されます。ダミー変数とは、各カテゴリに 0/1 の値を割り当てるバイナリ変数のことです。

使い方

import pandas as pd

# データの作成
data = pd.Series(['A', 'B', 'C', 'A', 'B'])

# ダミー変数の作成
dummy_data = data.str.get_dummies()

print(dummy_data)

上記のコードを実行すると、以下の出力が得られます。

   A  B  C
0  1  0  0
1  0  1  0
2  0  0  1
3  1  0  0
4  0  1  0

オプション

  • sep: 文字列を分割する区切り文字を指定します。デフォルトは | です。
  • prefix: ダミー変数の列名にプレフィックスを追加します。デフォルトは None です。
  • drop_first: 最初のダミー変数を削除します。デフォルトは False です。
# 区切り文字を指定
dummy_data = data.str.get_dummies(sep=',')

print(dummy_data)
   A,B,C
0  1,0,0
1  0,1,0
2  0,0,1
3  1,0,0
4  0,1,0
  • prefix を指定
# 列名にプレフィックスを追加
dummy_data = data.str.get_dummies(prefix='category')

print(dummy_data)
   category_A  category_B  category_C
0  1          0          0
1  0          1          0
2  0          0          1
3  1          0          0
4  0          1          0
  • drop_first を指定
# 最初のダミー変数を削除
dummy_data = data.str.get_dummies(drop_first=True)

print(dummy_data)
   B  C
0  0  0
1  1  0
2  0  1
3  0  0
4  1  0

利点

  • カテゴリカル変数を数値に変換することで、機械学習モデルで扱いやすくすることができます。
  • データ可視化を容易にすることができます。

注意点

  • ダミー変数の数が多すぎると、モデルが過学習する可能性があります。
  • メモリ使用量が増加する可能性があります。


この例では、複数の区切り文字を持つ文字列を分割し、それぞれのカテゴリに対してダミー変数を作成します。

import pandas as pd

# データの作成
data = pd.Series(['A,B,C', 'A,B', 'C,A,B'])

# 複数の区切り文字を指定
dummy_data = data.str.get_dummies(sep=', |,')

print(dummy_data)
   A  B  C
0  1  1  1
1  1  1  0
2  0  1  1

例 2:列名をカスタマイズ

この例では、ダミー変数の列名をカスタマイズします。

import pandas as pd

# データの作成
data = pd.Series(['US', 'UK', 'US', 'Canada'])

# 列名をカスタマイズ
dummy_data = data.str.get_dummies(prefix='country')

print(dummy_data)
   country_US  country_UK  country_Canada
0  1          0          0
1  0          1          0
2  1          0          0
3  0          0          1

例 3:最初のダミー変数を削除

この例では、最初のダミー変数を削除します。

import pandas as pd

# データの作成
data = pd.Series(['Male', 'Female', 'Male', 'Female'])

# 最初のダミー変数を削除
dummy_data = data.str.get_dummies(drop_first=True)

print(dummy_data)
   Female  Male
0  0       1
1  1       0
2  0       1
3  1       0


pd.get_dummies 関数は、DataFrame の列をダミー変数に変換するために使用されます。Series に対して使用する場合は、まず Series を DataFrame に変換する必要があります。

import pandas as pd

# データの作成
data = pd.Series(['A', 'B', 'C', 'A', 'B'])

# DataFrameへの変換
df = pd.DataFrame({'col': data})

# ダミー変数の作成
dummy_data = pd.get_dummies(df)

print(dummy_data)
   col_A  col_B  col_C
0  1      0      0
1  0      1      0
2  0      0      1
3  1      0      0
4  0      1      0

ループと条件分岐

ループと条件分岐を使用して、手動でダミー変数を作成することもできます。

import pandas as pd

# データの作成
data = pd.Series(['A', 'B', 'C', 'A', 'B'])

# ダミー変数の作成
dummy_data = pd.DataFrame()

for category in data.unique():
  dummy_data[f'dummy_{category}'] = data == category

print(dummy_data)
   dummy_A  dummy_B  dummy_C
0  1        0        0
1  0        1        0
2  0        0        1
3  1        0        0
4  0        1        0

正規表現

正規表現を使用して、文字列を分割し、ダミー変数を作成することもできます。

import pandas as pd
import re

# データの作成
data = pd.Series(['A,B,C', 'A,B', 'C,A,B'])

# 正規表現による分割
dummy_data = pd.DataFrame()

for value in data:
  categories = re.findall(r'[A-Z]', value)
  for category in categories:
    dummy_data[f'dummy_{category}'] = value.count(category)

print(dummy_data)
   dummy_A  dummy_B  dummy_C
0  1        1        1
1  1        1        0
2  0        0        2
3  1        1        0
4  0        1        1

外部ライブラリ

scikit-learn や category_encoders などの外部ライブラリを使用して、ダミー変数を作成することもできます。これらのライブラリは、pandas.Series.str.get_dummies 関数よりも多くの機能を提供する場合があります。