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

如何为嵌套电影类型列表生成正确的Pandas独热编码

解决电影类型嵌套列表的独热编码重复列问题

你遇到的核心问题是**col_two字段存储的是列表而非字符串**,直接用.str方法会报错,且未清理的括号符号导致了重复类别。下面是一步步的解决方案:

第一步:清理列表中的多余字符

因为col_two的每个元素是带[/]/空格的类型字符串组成的列表,我们需要遍历每个列表,把每个类型的多余符号去掉:

# 清理每个列表元素的括号和空格
df3['col_two_clean'] = df3['col_two'].apply(
    lambda x: [genre.strip('[] ') for genre in x]
)

这里strip('[] ')会移除每个类型字符串前后的[、]和空格,比如把'Adventure]'转成'Adventure','[Action'转成'Action',彻底消除重复类别的根源。

第二步:生成独热编码的两种方法

方法1:用pandas的explode + get_dummies

先把嵌套列表拆成每行一个类型,再生成独热编码后按id聚合:

# 拆分列表为多行
df_exploded = df3.explode('col_two_clean')

# 生成独热编码
dummies = pd.get_dummies(df_exploded['col_two_clean'])

# 按id聚合,保留每个类型的存在标记(1表示存在,0表示不存在)
one_hot_matrix = df_exploded[['id']].join(dummies).groupby('id').max()

方法2:用sklearn的MultiLabelBinarizer(更简洁)

直接处理清理后的嵌套列表,一步生成独热编码:

from sklearn.preprocessing import MultiLabelBinarizer

mlb = MultiLabelBinarizer()
# 生成独热编码矩阵,index用原id
one_hot_matrix = pd.DataFrame(
    mlb.fit_transform(df3['col_two_clean']),
    columns=mlb.classes_,
    index=df3['id']
)

为什么之前的方法报错?

你之前尝试的pd.Series.replace或.str方法报错,是因为**col_two的dtype是object,但存储的是列表对象,不是字符串**。.str访问器只适用于字符串类型的Series,所以必须先处理列表内部的元素,而不是直接对Series用字符串方法。

验证结果

运行完上述代码后,你可以用one_hot_matrix.columns查看所有类型列,会发现每个类型只对应唯一一列,没有Adventure和Adventure]这样的重复项了。

内容的提问来源于stack exchange,提问作者Simone Di Claudio

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:25:38