Pandas 库中用于分类变量独热编码(One-Hot Encoding)的函数 pd.get_dummies() 函数
文章目录
- [Pandas 库中用于分类变量独热编码(One-Hot Encoding)的函数 pd.get_dummies() 函数](#Pandas 库中用于分类变量独热编码(One-Hot Encoding)的函数 pd.get_dummies() 函数)
pd.get_dummies() 是 Pandas 库中用于分类变量独热编码(One-Hot Encoding)的函数。它将分类变量转换为二进制(0/1)列的形式,每个类别对应一列。
独热编码是机器学习预处理中的常用技术,因为大多数算法无法直接处理分类数据,需要将其转换为数值形式。
单词释义: get_dummies 中 "dummy" 在这里是"虚拟变量"的意思,指的是统计学和计量经济学中用于表示分类变量的二进制变量。
基本语法与参数
pd.get_dummies() 是 Pandas 库的顶级函数,用于将分类变量转换为独热编码格式。
语法格式
python
pd.get_dummies(data, prefix=None, prefix_sep='_', dummy_na=False, columns=None, drop_first=False, dtype=None)
参数说明
参数: data
类型: Series、DataFrame 或类数组对象。
描述: 要进行独热编码的数据。通常是包含分类变量的 Series 或 DataFrame。
参数: prefix
类型: 字符串、字符串列表或字典。
描述> 生成的新列名的前缀。如果不指定,则使用原始列名作为前缀。
参数: prefix_sep
类型: 字符串。
描述: 前缀和类别名之间的分隔符。默认为下划线 '_'。
参数: dummy_na
类型> 布尔值。
描述> 如果为 True,为缺失值(NaN)也创建一个单独的列。默认为 False。
参数: columns
类型: 列表或 None。
描述: 要编码的列名。如果不指定,则对所有 object、category 或 boolean 类型的列进行编码。
参数: drop_first
类型: 布尔值。
描述> 如果为 True,会删除每个分类变量的第一列,以避免多重共线性。在逻辑回归等模型中可以避免虚拟变量陷阱。默认为 False。
函数说明
返回值: 返回一个 DataFrame,每列对应一个类别,值为 0 或 1。
效果: 将分类变量转换为数值型的二进制列,便于机器学习算法处理。
实例
让我们通过一系列从简单到复杂的例子,彻底掌握 pd.get_dummies() 的用法。
示例 1:基础用法 - 对 Series 进行独热编码
python
import pandas as pd
# 1. 创建一个包含分类变量的 Series
colors = pd.Series(['red', 'blue', 'green', 'red', 'green', 'blue'])
print("=== 原始 Series ===")
print(colors)
# 2. 使用 pd.get_dummies() 进行独热编码
result = pd.get_dummies(colors)
print("\n=== pd.get_dummies() 独热编码结果 ===")
print(result)
运行结果:

代码解析:
原始 Series 包含三种颜色:red、blue、green。
独热编码后,每种颜色变成一列,用 True/False 表示该行是否属于该类别。
每行有且只有一个 True,对应原始的颜色值。
示例 2:对 DataFrame 的指定列进行编码
在数据分析中,通常只需要对特定的分类列进行编码,保留数值列不变。
python
import pandas as pd
# 完整显示设置
pd.set_option('display.max_rows', None) # 显示所有行
pd.set_option('display.max_columns', None) # 显示所有列
pd.set_option('display.width', None) # 自动适应宽度
pd.set_option('display.max_colwidth', None) # 显示完整单元格内容
# 1. 创建包含数值和分类变量的 DataFrame
df = pd.DataFrame({
'name': ['Alice', 'Bob', 'Charlie', 'Diana'],
'age': [25, 30, 35, 28],
'city': ['Beijing', 'Shanghai', 'Beijing', 'Guangzhou'],
'department': ['Sales', 'Engineering', 'Sales', 'HR']
})
print("=== 原始 DataFrame ===")
print(df)
# 2. 对指定的分类列进行独热编码
result = pd.get_dummies(df, columns=['city', 'department'])
print("\n=== 对 city 和 department 列进行独热编码 ===")
print(result)

代码解析:
使用 columns 参数指定只对 city 和 department 列进行编码。
数值列 age 和文本列 name 保持不变。
新生成的列名使用默认的分隔符下划线,如 city_Beijing。
示例 3:自定义前缀和分隔符
可以使用 prefix 和 prefix_sep 参数自定义新列的名称。
python
import pandas as pd
# 1. 创建 DataFrame
df = pd.DataFrame({
'color': ['red', 'blue', 'green', 'red'],
'size': ['S', 'M', 'L', 'XL']
})
print("=== 原始 DataFrame ===")
print(df)
# 2. 使用 prefix 参数自定义前缀
result_prefix = pd.get_dummies(df, prefix=['color', 'size'])
print("\n=== 使用自定义前缀 ===")
print(result_prefix)
# 3. 使用 prefix_sep 自定义分隔符
result_sep = pd.get_dummies(df, prefix=['color', 'size'], prefix_sep='-')
print("\n=== 使用自定义分隔符 '-' ===")
print(result_sep)
运行结果:

代码解析:
prefix=['color', 'size'] 为不同列指定不同的前缀。
prefix_sep='-' 将默认的下划线改为短横线,新列名变为 color-red 这种形式。
示例 4:处理缺失值和 drop_first 参数
python
import pandas as pd
import numpy as np
# 1. 包含缺失值的数据
df = pd.DataFrame({
'color': ['red', 'blue', np.nan, 'red', 'green'],
'size': ['S', 'M', 'L', np.nan, 'XL']
})
print("=== 包含缺失值的 DataFrame ===")
print(df)
# 2. 默认不处理缺失值
result_default = pd.get_dummies(df, columns=['color'])
print("\n=== 默认不处理缺失值 ===")
print(result_default)
# 3. dummy_na=True 为缺失值创建单独的列
result_na = pd.get_dummies(df, columns=['color'], dummy_na=True)
print("\n=== dummy_na=True 为缺失值创建列 ===")
print(result_na)
# 4. drop_first=True 删除第一列避免多重共线性
result_drop = pd.get_dummies(df, columns=['color'], drop_first=True)
print("\n=== drop_first=True 删除第一列 ===")
print(result_drop)

代码解析:
dummy_na=True 为缺失值创建一个额外的列(本例中显示为 color_nan列)。
drop_first=True 删除每组的第一列(如 color_blue 被删除),可以避免线性模型中的多重共线性问题。