Python Pandas.get_dummies
函数解析与实战教程
摘要
pandas.get_dummies
是数据科学和机器学习领域中进行特征工程时不可或缺的工具。它主要用于将分类变量(categorical variables)转换为一种称为“独热编码”(One-Hot Encoding)的数值格式,以便机器学习算法能够处理。本文章将从函数的核心功能、参数详解、最新版本变更、实战技巧、性能优化,以及与 sklearn.preprocessing.OneHotEncoder
的深度对比等多个维度,为读者提供一份全面的使用教程和分析。
一、 get_dummies
核心功能与参数深度解析
pandas.get_dummies
的核心作用是将一个包含分类数据的 Pandas Series
或 DataFrame
中的列转换为哑变量(dummy variables)或指示变量(indicator variables)。简而言之,它会为原始列中的每一个唯一类别创建一个新列,新列中的值用 0 和 1(或布尔值 False
和 True
)来表示某个样本是否属于该类别。
函数签名
pandas.get_dummies(
data,
prefix=None,
prefix_sep='_',
dummy_na=False,
columns=None,
sparse=False,
drop_first=False,
dtype=None
)
参数详解
-
data
:- 作用: 指定要进行独热编码的输入数据。
- 数据类型: 可以是类数组(array-like)、
Series
或DataFrame
。这是函数处理的主要对象。
-
columns
:- 作用: 指定在
DataFrame
中需要进行编码的列名列表。 - 详解: 这是一个非常关键的参数。如果
data
是一个DataFrame
,通过columns
参数可以精确控制对哪些列进行转换。如果不指定该参数,get_dummies
默认会尝试转换所有数据类型为object
或category
的列 。数值类型的列将被忽略 。
- 作用: 指定在
-
prefix
和prefix_sep
:- 作用: 自定义新生成列的名称。
prefix
用于添加前缀,prefix_sep
是前缀与类别名之间的分隔符(默认为_
)。 - 详解: 当对一个
Series
或DataFrame
的多列进行编码时,为了避免新列重名以及提高可读性,强烈建议使用prefix
参数。例如,对名为color
的列进行编码,设置prefix='color'
,生成的列会是color_Red
、color_Green
等 。这对于区分不同原始特征生成的哑变量至关重要。
- 作用: 自定义新生成列的名称。
-
dummy_na
:- 作用: 控制是否为缺失值(
NaN
)创建一个专门的指示列。 - 详解: 默认值为
False
,此时NaN
值在所有新生成的哑变量列中都将表示为0
(或False
),即NaN
信息会丢失。如果设置为True
,则会额外生成一列(例如color_nan
),专门用于标识原始数据中的缺失值 。在某些场景下,“缺失”本身可能是一种有用的信息,这时就应该将此参数设为True
。
- 作用: 控制是否为缺失值(
-
drop_first
:- 作用: 是否从 K 个类别的哑变量中删除第一个,只保留 K-1 个。
- 详解: 此参数主要用于避免机器学习模型中的 多重共线性(multicollinearity) 问题。在一个独热编码的特征组中,所有哑变量列的和恒为1,这意味着它们是线性相关的。这对于某些模型(如线性回归、逻辑回归)是有问题的。设置
drop_first=True
可以移除一个基准类别,打破这种线性关系 。例如,一个有Red
,Green
,Blue
三个类别的特征,编码后只保留Green
和Blue
两列,当这两列都为0时,就代表该样本的类别是Red
。
-
dtype
:- 作用: 指定新生成的哑变量列的数据类型