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)
举个例子,假设你的原始数据是这样:
| title | genres |
|---|---|
| 电影A | Action |
| 电影B | Drama |
| 电影C | Comedy |
运行上面的代码后,会自动新增Action、Comedy、Drama、Thriller这几列,每一行对应的值是1(存在该类型)或0(不存在),完美符合你的需求。
情况2:已经拆分出多个类型列(比如genre_1、genre_2...)
如果你已经把genres拆成了多个列,也可以基于这些列生成目标列,步骤如下:
- 先收集所有拆分列里的唯一类型:
# 先筛选出所有拆分后的类型列(假设列名包含"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/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
相关产品推荐
相关产品推荐

