pandas___get_dummies详解

一、概念详解

1、定义

pd.get_dummies()是一种用于处理分类数据的技术,称为 ​独热编码。

  • 问题背景:在机器学习和统计分析中,很多算法(如线性回归、逻辑回归、支持向量机等)只能处理数值型数据,无法直接处理文本类型的分类数据(如"北京"、"上海"、"深圳";"男"、"女")。我们需要一种方法将分类数据转换为数值数据。
  • 错误方法:直接映射为 0, 1, 2(例如:北京=0,上海=1,深圳=2)。这种方法会引入一个错误的顺序关系(模型会误以为 深圳(2) > 上海(1) > 北京(0)),这对于没有内在顺序的类别(名义变量)是不合适的。
  • 正确方法:独热编码:它为每个类别创建一个新的二进制特征(虚拟变量)。对于样本的每个原始特征,只有对应类别的列是 1,其他都是 0。

pd.get_dummies()就是 Pandas 提供的自动完成独热编码的函数。

2、函数语法、参数、返回值详解

语法定义如下

python 复制代码
pd.get_dummies(data, prefix=None, prefix_sep='_', dummy_na=False, columns=None, sparse=False, drop_first=False, dtype=None)

核心参数详解

  • data:要处理的数据。可以是 DataFrame 或 Series。
  • prefix:用于为新生成的列添加前缀。
    • str类型:为所有新列添加同一个前缀。
    • listof str类型:为不同列指定不同的前缀,长度必须与要转换的列数一致。
    • dict类型:{'原列名': '指定前缀'}。
    • None(默认):新列的前缀就是原列名。
  • prefix_sep:前缀和类别值之间的分隔符,默认为 '_'。例如,列 'City'的值 'Beijing'会生成新列 'City_Beijing'。
  • dummy_na:布尔值,默认为 False。如果为 True,会为数据中的缺失值 NaN也创建一个单独的指示列(例如 'City_nan')。这有助于明确区分"缺失"本身也是一种信息。
  • columns:类似列表的结构,默认为 None。指定要对 DataFrame 中的哪些列进行编码。如果为 None,则会编码所有对象类型(string) 或 分类类型(category) 的列。
  • drop_first:布尔值,默认为 False。这是为了避免虚拟变量陷阱 的关键参数。
    • False(默认):为所有 k个类别创建 k个虚拟变量列。
    • True:只创建 k-1个虚拟变量列。删除第一列是为了避免多重共线性。例如,性别有"男"、"女"两类,如果"男"列是 0,那么它必然意味着"女"列是 1。所以只需要一列就够了。在线性模型中,通常建议设置为 True。
  • dtype:为新列设置数据类型,默认为 np.uint8(无符号8位整数,即0和1)。为了节省内存,通常保持默认即可

返回值

该方法返回一个dataframe

二、实例详解

1、基本用法(处理 Series)

将一个Series对象中的所有类型,设置成df的列名,然后将原Series对象(看成一列)去匹配每一列,如果匹配成功则标记为True,否则标记为False

python 复制代码
import pandas as pd

# 创建一个包含城市信息的Series
s = pd.Series(['北京', '上海', '深圳', '北京', '广州'])
print("原始数据:")
print(s)

# 使用 get_dummies
df_encoded = pd.get_dummies(s)
print("\n独热编码后:")
print(df_encoded)
python 复制代码
原始数据:
0    北京
1    上海
2    深圳
3    北京
4    广州
dtype: object

独热编码后:
      上海     北京     广州     深圳
0  False   True  False  False
1   True  False  False  False
2  False  False  False   True
3  False   True  False  False
4  False  False   True  False

2、处理 DataFrame 并使用参数

原始数据

python 复制代码
# 创建一个示例DataFrame
df = pd.DataFrame({
    '城市': ['北京', '上海', '深圳', '北京'],
    '规模': ['大', '大', '中', '小'],
    '人口': [2100, 2400, 1300, 2200]
})

print("原始DataFrame:")
print(df)

原始DataFrame:

城市 规模 人口

0 北京 大 2100

1 上海 大 2400

2 深圳 中 1300

3 北京 小 2200

编码

将城市和人口中的类别当作列名,然后将对应的城市列和人口列去匹配列名,如果匹配成功标记成True,否则标记成False

python 复制代码
# 1. 对所有分类列进行编码(默认行为)
encoded_df1 = pd.get_dummies(df)
print("\n1. 默认编码所有分类列:")
print(encoded_df1)
  1. 默认编码所有分类列:
    人口 城市_上海 城市_北京 城市_深圳 规模_中 规模_大 规模_小
    0 2100 False True False False True False
    1 2400 True False False False True False
    2 1300 False False True True False False
    3 2200 False True False False False True

prefix=['City', 'Size']

prefix=['City', 'Size'] 用于设置列明的前缀

python 复制代码
# 2. 使用 prefix 和 prefix_sep
encoded_df2 = pd.get_dummies(df, prefix=['City', 'Size'])
print("\n2. 使用自定义前缀:")
print(encoded_df2)
  1. 使用自定义前缀:
    人口 City_上海 City_北京 City_深圳 Size_中 Size_大 Size_小
    0 2100 False True False False True False
    1 2400 True False False False True False
    2 1300 False False True True False False
    3 2200 False True False False False True

对指定列明编码

python 复制代码
# 3. 指定 columns 参数,只对'城市'列编码
encoded_df3 = pd.get_dummies(df, columns=['城市'])
print("\n3. 只对'城市'列编码:")
print(encoded_df3)
  1. 只对'城市'列编码:
    规模 人口 城市_上海 城市_北京 城市_深圳
    0 大 2100 False True False
    1 大 2400 True False False
    2 中 1300 False False True
    3 小 2200 False True False
python 复制代码
# 4. 使用 drop_first 避免虚拟变量陷阱
encoded_df4 = pd.get_dummies(df, columns=['城市', '规模'], drop_first=True)
print("\n4. 使用 drop_first=True:")
print(encoded_df4)
# 注意:'城市_北京'和'规模_大'被移除了。现在参考类别是'北京'和'大'。

.4 使用 drop_first=True:

人口 城市_北京 城市_深圳 规模_大 规模_小

0 2100 True False True False

1 2400 False False True False

2 1300 False True False False

3 2200 True False False True

相关推荐
wudl556621 小时前
Pandas-数据清洗与缺失值处理
pandas
东方佑21 小时前
Pandas积木MCP工具 - 完整项目代码
pandas
景彡先生1 天前
Python pandas数据透视表(pivot_table)详解:从入门到实战,多维数据分析利器
python·数据分析·pandas
wudl55662 天前
Pandas--数据读取与写入
pandas
wudl55662 天前
Pandas--数据选择与索引
pandas
wudl55663 天前
Pandas-DataFrame 数据结构详解
数据结构·pandas
wudl55663 天前
Pandas 简介与安装
pandas
左师佑图4 天前
综合案例:Python 数据处理——从Excel文件到数据分析
开发语言·python·数据分析·excel·pandas
景早7 天前
pandas简介
pandas