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

电影数据集类型编码时MultiLabelBinarizer输出异常如何解决

问题根因

你的genres列看起来是列表结构,实际存储的是字符串形式的列表表示(比如从CSV等文件读取时默认会读为字符串)。MultiLabelBinarizer会将输入的每个元素视为可迭代对象处理,直接传入字符串就会被拆分为单个字符编码,才会出现你遇到的错误结果。

解决方法

方法1:使用MultiLabelBinarizer(推荐)

先将字符串格式的列表转为Python原生列表,再做独热编码:

import pandas as pd
from sklearn.preprocessing import MultiLabelBinarizer
import ast

# 1. 转换genres列为真实列表
df['genres'] = df['genres'].apply(ast.literal_eval)

# 2. 若需要将复合类型名按空格拆分(比如把"Science Fiction"拆为两个独立类型),可加下面这行
# df['genres'] = df['genres'].apply(lambda x: [word for genre in x for word in genre.split()])

# 3. 独热编码
mlb = MultiLabelBinarizer()
genres_onehot = pd.DataFrame(mlb.fit_transform(df['genres']), columns=mlb.classes_, index=df.index)

# 4. 合并结果
result = pd.concat([df['title'], genres_onehot], axis=1)

方法2:使用Pandas原生方法

不需要引入sklearn库,用Pandas自带的get_dummies实现:

import pandas as pd
import ast

df['genres'] = df['genres'].apply(ast.literal_eval)
# 同样需要拆分复合类型的话先执行上面注释的拆分代码
genres_onehot = df['genres'].str.join('|').str.get_dummies()
result = pd.concat([df['title'], genres_onehot], axis=1)

两种方法都可以得到你需要的结果,如果你示例中的预期输出是把"Science Fiction"拆为两个独立字段,加上对应的拆分代码即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 14:39:00