You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用Pandas将单列编码为多列?解决重复编码问题

解决Pandas中多标签Genre列的独热编码重复问题

嘿,这个问题我之前也踩过坑!拆分列后用get_dummies确实会生成一堆带前缀的重复genre列,手动遍历行设置标记又繁琐低效。其实Pandas有更优雅的方案来处理这种多标签的独热编码,下面给你两种实用方法:

方法一:直接对原列使用str.get_dummies(最优方案)

不用先拆分列,直接对原始的逗号分隔字符串列调用str.get_dummies,它会自动识别所有唯一的genre,生成无重复的独热编码列,一步到位:

import pandas as pd

# 模拟你的数据
df = pd.DataFrame({
    'genres': ['Adventure,Comedy', 'Action,Adventure', 'Comedy,Drama,Action']
})

# 直接生成独热编码
genre_dummies = df['genres'].str.get_dummies(sep=',')

# 把编码结果合并回原DataFrame
df = pd.concat([df, genre_dummies], axis=1)

运行后你会得到AdventureComedyActionDrama这些独立列,每一行只要包含对应genre就标记为1,完美避免重复问题。

方法二:如果已经拆分了列,用melt+ pivot_table合并重复项

要是你已经把genres拆分成了多列(比如genre1、genre2、genre3),可以通过把宽格式转成长格式再聚合的方式,合并重复的genre列:

# 假设已经拆分得到多列
df_split = df['genres'].str.split(',', expand=True).rename(columns={0:'genre1', 1:'genre2', 2:'genre3'})

# 转成长格式,保留原索引
melted = df_split.melt(var_name='split_col', value_name='genre', ignore_index=False)

# 去掉空值(如果拆分后有缺失的话)
melted = melted.dropna(subset=['genre'])

# 重新转成宽格式,统计每个genre是否存在(存在则为1)
genre_dummies = melted.pivot_table(
    index=melted.index, 
    columns='genre', 
    aggfunc='size', 
    fill_value=0
)

# 合并回原DataFrame
df = pd.concat([df, genre_dummies], axis=1)

这个方法会把所有拆分列里的同一种genre合并到同一列,彻底消除前缀导致的重复问题。

总的来说,第一种方法是最推荐的,代码简洁、效率高,完全不需要额外的拆分或循环操作。

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

火山引擎 最新活动