当前位置: 首页 > ds >正文

Python Pandas.from_dummies函数解析与实战教程

Python Pandas.from_dummies 函数解析与实战教程

摘要

本文章旨在提供一份关于 pandas.from_dummies 函数的全面的教程。pandas.from_dummies 是数据科学工具库 Pandas 自 1.5.0 版本引入的一个强大功能,其核心作用是执行 pandas.get_dummies 的逆操作,即将独热编码(One-Hot Encoding)或哑变量(Dummy Variables)转换回原始的分类变量格式 。这在数据预处理、特征工程的逆向转换以及机器学习模型结果解释等场景中具有极高的实用价值。

我们将从函数的基本语法、参数详解入手,通过丰富的代码示例,逐步深入到高级应用场景,特别是如何精确地重建由 get_dummies(drop_first=True) 生成的数据。此外,还将详细剖析常见的错误类型及其处理方法,并总结最佳实践,旨在帮助从初学者到资深数据分析师的各层次用户全面掌握该函数。


1. 函数概述与核心价值

在进行数据分析和机器学习时,我们经常使用 pd.get_dummies 函数将分类特征(如“颜色”列中的“红”、“绿”、“蓝”)转换为数值形式的哑变量,以便模型能够处理。然而,当模型训练完成或需要将处理后的数据还原以供业务解读时,我们就需要一个可靠的逆向操作。pandas.from_dummies 正是为此而生。

  • 核心功能: 将包含哑变量的 DataFrame 转换回包含原始分类变量的 DataFrame 。
  • 核心价值:
    1. 数据可读性: 将模型输出或处理后的数据还原成人类易于理解的分类标签。
    2. 数据往返: 实现分类数据 -> 哑变量 -> 分类数据的无损(在正确使用下)转换,确保数据处理流程的完整性。
    3. 模型解释: 帮助解释那些使用独热编码特征的机器学习模型的结果。

2. 函数语法与参数详解

from_dummies 的函数签名相对简洁,但每个参数都至关重要,理解它们是精确控制转换过程的关键。

2.1 函数签名

pandas.from_dummies(data, sep=None, default_category=None)

2.2 参数深度解析

data: pandas.DataFrame

这是必需的参数,代表包含哑变量的输入数据。对该 DataFrame 有严格的要求 :

  • 类型: 必须是 Pandas DataFrame。
  • 内容: 其列应该是代表哑变量的列,并且这些列中的值应仅包含整数 10,或布尔值 TrueFalse 。任何非二值(如 2, -1)或 NaN 值都可能导致错误。
sep: str, 默认为 None

这个参数定义了哑变量列名中前缀类别值之间的分隔符 。

  • 工作原理: from_dummies 通过此分隔符来识别哪些哑变量列属于同一个原始分类变量。例如,对于列名 color_red, color_green, color_blue,如果设置 sep='_',函数会识别出它们都属于 color 这个前缀(未来的列名),而 red, green, blue 是对应的类别值。
  • 默认行为: 虽然官方文档显示默认为 None 但在实际使用中,如果没有指定,Pandas 会尝试以 _ 作为默认分隔符进行推断 。为确保代码的明确性和健壮性,建议在列名包含分隔符时显式指定 sep
default_category: None, Hashable, 或 dict, 默认为 None

此参数用于处理“全零行”的情况,即某一行在对应某个前缀的所有哑变量列中值均为 0 。这种情况尤其在处理由 get_dummies(drop_first=True) 生成的数据时非常普遍。

  • None (默认): 如果某行对于某个前缀的哑变量全为0,且 default_category 未设置,函数将引发 ValueError,因为它无法确定该行应属于哪个类别 。
  • Hashable (可哈希值, 如字符串或数字): 当提供一个单一值(例如 default_category='Unknown')时,所有前缀下的“全零行”都将被赋予这个统一的默认类别。
  • dict (字典): 这是最灵活的用法,可以为不同的前缀指定不同的默认类别。字典的键是前缀(即原始列名),值是对应的默认类别。例如:default_category={'color': 'blue', 'size': 'M'}

3. 基础使用教程

让我们通过几个实例来掌握 from_dummies 的基本用法。

3.1 场景一:简单的单列逆转换

假设我们有一个关于动物的分类 Series,我们先将其转换为哑变量,然后再转换回来。

import pandas as pd# 原始数据
s = pd.Series(['cat', 'dog', 'cat', 'mouse', 'dog'], name='animal')
print("原始 Series:")
print(s)
print("-" * 30)# 步骤1: 使用 get_dummies 创建哑变量
# 注意,get_dummies 会自动使用 Series 的 name 作为前缀
dummies = pd.get_dummies(s)
print("生成的哑变量 DataFrame:")
print(dummies)
print("-" * 30)# 步骤2: 使用 from_dummies 将其转换回来
# 此处 sep='_' 是隐式默认行为,显式指定更佳
# from_dummies 返回的是一个 DataFrame,我们需要提取其唯一的列
reconstructed_series = pd.from_dummies(dummies, sep='_')['animal']
http://www.xdnf.cn/news/17023.html

相关文章:

  • ubuntu双系统设置默认启动系统
  • Windows本地使用dify搭建知识库+ollama+deepseek
  • Java单元测试和设计模式
  • winscp 连openwrt 返回127错误码
  • InfluxDB 与 Node.js 框架:Express 集成方案(一)
  • 【网络原理】HTTP协议(一)
  • Chisel芯片开发入门系列 -- 17. CPU芯片开发和解释7(5级流水线指令原理)
  • 【Flutter3.8x】flutter从入门到实战基础教程(八):公共state的集中管理机制
  • WordPress AI写作插件开发实战:从GPT集成到企业级部署
  • 【Java】不允许直接操作数据表中的数据,开发前台界面来实现对多个数据表的增删改查
  • 【LeetCode刷题指南】--二叉树的前序遍历,二叉树的中序遍历
  • 力扣-105.从前序与中序遍历序列构造二叉树
  • Makefile 从入门到精通:自动化构建的艺术
  • 【人工智能agent】--服务器部署PaddleX 的 印章文本识别模型
  • 详解Python标准库之互联网数据处理
  • 电脑手机热点方式通信(下)
  • 基于OAuth2与JWT的微服务API安全实战经验分享
  • 【云计算】云主机的亲和性策略(四):云主机组
  • Go语言中的闭包详解
  • 【读代码】 KAG项目:开源知识图谱自动构建与推理平台原理与实践
  • Spring框架深度学习实战
  • 深度学习核心:神经网络-激活函数 - 原理、实现及在医学影像领域的应用
  • 进阶向:自动化天气查询工具(API调用)
  • Munge 安全认证和授权服务的工作原理,以及与 Slurm 的配合
  • SpringCloud实战:机器人对战系统架构
  • 电脑手机热点方式通信(上)
  • 什么是AWS Region和AWS Availability Zones
  • 算法复杂度分析
  • 服装ERP系统:高效整合管理,优化生产流程
  • Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现道路上头盔的检测识别(C#代码,UI界面版)