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

使用pandas对逗号分隔列生成哑变量时出现重复列的问题及解决

Pandas Series生成哑变量出现重复列的原因与解决方法

原始Series

0    mcdonalds, popeyes
1    wendys
2    popeyes
3    mcdonalds
4    mcdonalds
dtype: object

期望的哑变量结果

popeyes  wendys  mcdonalds
0        1       0          1
1        0       1          0
2        1       0          0
3        0       0          1
4        0       0          1

遇到的问题

使用t.str.get_dummies(sep=',')后出现重复的popeyes列:

popeyes  wendys  mcdonalds  popeyes
0        1       0          1        0
1        0       1          0        0
2        0       0          0        1
3        0       0          1        0
4        0       0          1        0

原因

重复列的核心问题是原始字符串中存在空格不一致的类别:

  • 第一行的popeyes是逗号后带前缀空格的 popeyes
  • 第三行的popeyes是无空格的纯字符串
    str.get_dummies会把这两个视为完全不同的类别,因此生成了重复列。

解决方法

先对Series做字符串清洗,统一类别格式,再生成哑变量,有两种常用方式:

方法1:先清洗空格再调用get_dummies

import pandas as pd

# 原始Series
t = pd.Series(["mcdonalds, popeyes", "wendys", "popeyes", "mcdonalds", "mcdonalds"])

# 清洗:替换逗号后的空格,同时去掉字符串首尾多余空格
t_clean = t.str.replace(r',\s+', ',', regex=True).str.strip()

# 生成哑变量
dummies = t_clean.str.get_dummies(sep=',')
print(dummies)

方法2:拆分后去重再聚合

import pandas as pd

t = pd.Series(["mcdonalds, popeyes", "wendys", "popeyes", "mcdonalds", "mcdonalds"])

# 按逗号拆分,堆叠成多级索引Series,去除每个元素的空格
split_data = t.str.split(',', expand=True).stack().str.strip()

# 生成哑变量后按原索引分组求和
dummies = pd.get_dummies(split_data).groupby(level=0).sum()
print(dummies)

两种方法都能得到你期望的无重复列的哑变量结果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 20:50:05