Pandas 库中用于分类变量独热编码(One-Hot Encoding)的函数 pd.get_dummies() 函数

Pandas 库中用于分类变量独热编码(One-Hot Encoding)的函数 pd.get_dummies() 函数

文章目录

  • [Pandas 库中用于分类变量独热编码(One-Hot Encoding)的函数 pd.get_dummies() 函数](#Pandas 库中用于分类变量独热编码(One-Hot Encoding)的函数 pd.get_dummies() 函数)
    • 基本语法与参数
    • 语法格式
    • 参数说明
    • 函数说明
    • 实例
      • [示例 1:基础用法 - 对 Series 进行独热编码](#示例 1:基础用法 - 对 Series 进行独热编码)
      • [示例 2:对 DataFrame 的指定列进行编码](#示例 2:对 DataFrame 的指定列进行编码)
      • [示例 3:自定义前缀和分隔符](#示例 3:自定义前缀和分隔符)
      • [示例 4:处理缺失值和 drop_first 参数](#示例 4:处理缺失值和 drop_first 参数)

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 被删除),可以避免线性模型中的多重共线性问题。
相关推荐
manyingAi2 小时前
AI漫剧制作全流程技术拆解:从NLP剧本解析到一致性角色生成
人工智能·自然语言处理
Bzc11456232 小时前
守正笃行 匠心护康:以中医智慧赋能新时代慢病长效管理
大数据·人工智能·生活
高洁012 小时前
工信部教考中心证书-人工智能系列本系列
人工智能·python·深度学习·算法
生命涌现2 小时前
【生命涌现植物健康分析】在火山云Agent平台的使用教程
人工智能·计算机视觉·agent·多模态大模型·openclaw小龙虾技能
小润nature2 小时前
AI × 嵌入式工程晚报|端侧智能体开始以“可观测闭环”而非模型大小取胜
人工智能
MomentYY2 小时前
RAG 评估:答错了,是检索的错还是生成的错?
人工智能·agent·ai编程
名字还没想好☜2 小时前
Go 的 sync.Cond 实战:用条件变量做等待/通知,比忙轮询省 CPU
开发语言·数据库·后端·golang·go
易观Analysys2 小时前
2026年中国AI营销agent产业生态图谱
大数据·人工智能
FII工业富联科技服务2 小时前
制造业AI规模化落地架构:从Task Agent到Factory Agent Brain的三级智能体演进解析
大数据·人工智能·架构