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

Python Pandas:基于原列与拆分列实现电影类型One-Hot编码

解决DataFrame电影类型的独热编码问题

嘿,我来帮你搞定这个需求!其实你完全不用先拆分列再折腾——pandas里有个现成的工具能一步到位生成你要的「每个类型独立列、存在标1否则0」的结果,而且效率比拆分后再处理高得多。下面分两种情况给你讲清楚:

情况1:直接用原始的genres列(推荐)

如果你还保留着原始的、用|分隔的genres列,直接用str.get_dummies()方法就能一键生成独热编码列,代码超简单:

import pandas as pd

# 假设你的DataFrame名叫df,genres是原始的分隔列
# 生成所有类型的独热编码
genre_dummies = df['genres'].str.get_dummies(sep='|')

# 把生成的列合并回原DataFrame
df = pd.concat([df, genre_dummies], axis=1)

举个例子,假设你的原始数据是这样:

titlegenres
电影AAction
电影BDrama
电影CComedy

运行上面的代码后,会自动新增Action、Comedy、Drama、Thriller这几列,每一行对应的值是1(存在该类型)或0(不存在),完美符合你的需求。

情况2:已经拆分出多个类型列(比如genre_1、genre_2...)

如果你已经把genres拆成了多个列,也可以基于这些列生成目标列,步骤如下:

  1. 先收集所有拆分列里的唯一类型:
# 先筛选出所有拆分后的类型列(假设列名包含"genre",你也可以直接写列名列表比如['genre_1', 'genre_2'])
genre_split_cols = [col for col in df.columns if 'genre' in col]

# 提取所有出现过的唯一类型
all_unique_genres = df[genre_split_cols].stack().unique()
  1. 遍历每个类型,检查每行的拆分列里是否包含该类型,生成1/0列:
for genre in all_unique_genres:
    # 对每行的拆分列进行检查,存在该类型就标1,否则0
    df[genre] = df[genre_split_cols].apply(lambda row: 1 if genre in row.values else 0, axis=1)

小提醒

  • 第二种方法因为用到了apply逐行处理,数据量大的时候会比第一种方法慢,所以优先推荐第一种直接处理原始列的方式。
  • 如果拆分后的列有NaN(比如某部电影只有1个类型,后面的拆分列是空值),不用担心,genre in row.values会自动忽略NaN,不会影响判断结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:00:28