Pandas 中的 get_dummies 方法

Suraj Joshi 2023年1月30日
  1. pandas.get_dummies() 方法
  2. 使用 pandas.get_dummies() 方法建立帶有虛擬變數列的 DataFrame
  3. 設定 columns 只為指定的列建立虛擬變數
  4. 設定 prefix 來改變虛擬列的預設名稱
Pandas 中的 get_dummies 方法

本教程解釋瞭如何從帶有分類列的 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 列,我們有五個唯一的值,因此 Name 分裂成 Name_ 加上 DataFrame 中的每個唯一的名字。虛列的值將根據初始 DataFrame 中的值為 1 或 0。

students_df DataFrame 中 NameDaniel 值的行,students_df_dummies DataFrame 中 Name_Daniel 列的值為 1,而 students_df_dummies DataFrame 中 Name_Daniel 列的值為 0。

設定 columns 只為指定的列建立虛擬變數

預設情況下,get_dummies() 方法將為每一列的 dtypes objectcategory 建立帶有虛擬列的 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