Pandas get_dummies()

Pandas 中的 get_dummies() 方法用于将分类变量转换为虚拟变量。

每个类别都被转换为一个新列,其中包含二进制值(10),指示该类别在原始数据中的存在情况。

示例

import pandas as pd

# create a Series
data = pd.Series(['A', 'B', 'A', 'C', 'B'])

# use get_dummies on the Series dummies = pd.get_dummies(data)
print(dummies) ''' Output A B C 0 1 0 0 1 0 1 0 2 1 0 0 3 0 0 1 4 0 1 0 '''

get_dummies() 语法

Pandas 中 get_dummies() 方法的语法是

get_dummies(data, prefix=None, prefix_sep='_', dummy_na=False, drop_first=False)

get_dummies() 参数

get_dummies() 方法接受以下参数

  • data - 要转换的输入数据
  • prefix (可选) - 要附加到 DataFrame 列名的字符串
  • prefix_sep (可选) - 前缀和虚拟列名之间的分隔符
  • dummy_na (可选) - 添加一列来指示 NaNs,如果设置为 False,则忽略 NaNs。
  • drop_first (可选) - 是否删除第一个级别

get_dummies() 返回值

get_dummies() 方法返回一个 DataFrame,其中输入中的值成为单独的列,并用二进制值(10)填充,指示该值在原始数据每行的存在或不存在。


示例 1:在 Pandas 中按单列分组

import pandas as pd

# create a Series
data = pd.Series(['apple', 'orange', 'apple', 'banana'])

# use get_dummies() to convert the series into dummy variables dummy_data = pd.get_dummies(data)
print(dummy_data)

输出

   apple  banana  orange
0      1       0       0
1      0       0       1
2      1       0       0
3      0       1       0

在上面的示例中,我们创建了包含水果名称的 data Series。

然后我们应用了 get_dummies(),它创建了一个新的 DataFrame,其中每个水果名称都成为一列。

对于 data Series 的每一行,新 DataFrame 中对应的列如果存在水果名称,则为 1,否则为 0


示例 2:使用前缀应用 get_dummies()

import pandas as pd

# sample data
data = {'Color': ['Red', 'Green', 'Blue', 'Green', 'Red']}

# create a DataFrame
df = pd.DataFrame(data)

# get dummies with a specified prefix dummies = pd.get_dummies(df['Color'], prefix='Color')
print(dummies)

输出

    Color     Color_Blue    Color_Green  Color_Red
0    Red          0           0            1
1  Green          0           1            0
2   Blue          1           0            0
3  Green          0           1            0
4    Red          0           0            1

在这里,我们将 prefix='Color' 参数传递给了 get_dummies(),因此新的虚拟变量列的前缀是 Color_

因此,生成的 DataFrame 包含 Color_BlueColor_GreenColor_Red 列,分别表示相应颜色类别的存在或不存在。


示例 3:使用指定的前缀和前缀分隔符获取虚拟变量

import pandas as pd

# sample data
data = {'Color': ['Red', 'Green', 'Blue', 'Green', 'Red']}

# create a DataFrame
df = pd.DataFrame(data)

# get dummies with a specified prefix and prefix separator dummies = pd.get_dummies(df['Color'], prefix='Color', prefix_sep='--')
print(dummies)

输出

              Color--Blue      Color--Green  Color--Red
0                 0                  0            1
1                 0                  1            0
2                 1                  0            0
3                 0                  1            0
4                 0                  0            1

在此示例中,prefix_sep='--' 参数意味着前缀和原始类别名称将用 -- 分隔。

因此,对于像 Blue 这样的颜色,虚拟 DataFrame 中生成的列名将是 Color--Blue,以此类推。


示例 4:使用 dummy_na 管理缺失数据

import pandas as pd

# sample data with a missing value
data = {'Color': ['Red', 'Green', 'Blue', None, 'Red']}

# create a DataFrame
df = pd.DataFrame(data)

# get dummies without considering NaN dummies_without_nan = pd.get_dummies(df['Color'])
# get dummies considering NaN dummies_with_nan = pd.get_dummies(df['Color'], dummy_na=True)
print("Dummies without NaN handling:\n", dummies_without_nan) print("\nDummies with NaN handling:\n", dummies_with_nan)

输出

Dummies without NaN handling:
       Blue  Green  Red
0       0      0    1
1       0      1    0
2       1      0    0
3       0      0    0
4       0      0    1

Dummies with NaN handling:
     Blue      Green     Red  NaN
0     0          0        1    0
1     0          1        0    0
2     1          0        0    0
3     0          0        0    1
4     0          0        1    0

这里,

  1. get_dummies(df['Color']) - 生成 RedGreenBlue 列,但没有指示 NaN 值。
  2. get_dummies(df['Color'], dummy_na=True) - 生成相同的列,并添加一个名为 NaN 的额外列,指示原始数据中 NaN 值存在的位置。

示例 5:指定虚拟编码的列

import pandas as pd

# sample data
data = {'Color': ['Red', 'Green', 'Blue', 'Green', 'Red']}

# creating a DataFrame
df = pd.DataFrame(data)

# getting dummies without dropping any columns dummies_all = pd.get_dummies(df['Color'])
print("DataFrame with all dummy columns:") print(dummies_all) print("\n")
# getting dummies and dropping the first category column ('Blue' in this case) dummies = pd.get_dummies(df['Color'], drop_first=True)
print("DataFrame after dropping 'Blue':") print(dummies)

输出

DataFrame with all dummy columns:
   Color  Blue  Green   Red
0    Red     0      0    1
1  Green     0      1    0
2   Blue     1      0    0
3  Green     0      1    0
4    Red     0      0    1


DataFrame after dropping 'Blue':
   Color  Green   Red
0    Red      0   1
1  Green      1   0
2   Blue      0   0
3  Green      1   0
4    Red      0   1

在此,将 drop_first=True 参数传递给 get_dummies(),以指示已删除第一个类别。

因此,生成的 DataFrame 包含 GreenRed 两列。由于 Blue 类别已被删除,因此在这些列中未表示。

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战