You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用pandas.get_dummies时如何去除冗余分类编码列?

解决pandas.get_dummies生成的冗余分类列问题

这确实是one-hot编码里很常见的问题——对于有n个类别的分类变量,我们只需要n-1列就能完整表达所有类别信息,剩下的一列完全可以通过其他列反向推导出来。冗余列不仅会增加数据维度,还可能在后续建模(比如线性回归)中引发多重共线性问题。下面给你两种实用的解决方法:

方法一:直接用get_dummies的drop_first参数(推荐)

这是最简洁高效的方式,在生成one-hot编码时就自动去掉每个分类变量的第一个类别对应的列:

import pandas as pd

# 初始化你的DataFrame
df = pd.DataFrame(data=[['male','blue'],['female','brown'], ['male','black']],columns=['gender','eyes'])

# 使用drop_first=True去除冗余列
df_dummies = pd.get_dummies(df, drop_first=True)

运行后得到的df_dummies结果如下:

gender_maleeyes_blueeyes_brown
0110
1001
2100

这里gender_male列的值就足够表达性别信息:1代表male,0代表female;而eyes_blue和eyes_brown同时为0时,就对应black眼睛,完全没有信息损失。

方法二:手动删除已生成的冗余列

如果已经生成了包含冗余列的df_dummies,可以手动删除每个分类变量下的任意一列(保留n-1列即可):

# 假设已经生成了原始的df_dummies
df_dummies = pd.get_dummies(df)

# 手动删除冗余列:比如去掉gender_female和eyes_black
df_dummies_cleaned = df_dummies.drop(['gender_female', 'eyes_black'], axis=1)

这种方法适合需要自定义保留哪一列的场景,但变量较多时不如第一种方法高效。

简单总结一下:优先用drop_first=True参数自动处理,既省事儿又能避免手动操作出错~

内容的提问来源于stack exchange,提问作者gabboshow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 11:04:40