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

如何按组而非字符将列表列转为哑变量?两种尝试均失败

问题根源与解决方案

你得到字符级哑变量的核心原因是:personal_interests列的元素是字符串类型,而非列表/可迭代的兴趣组集合。两种方法都会把字符串拆成单个字符处理,自然得不到预期的组级结果。

第一步:先将字符串列转换为兴趣列表列

假设你的personal_interests列是类似"body,makeup"这种用分隔符(逗号、空格等)连接的字符串,先把它转成列表:

# 示例:逗号分隔的字符串转列表,根据实际分隔符调整
uf['personal_interests'] = uf['personal_interests'].str.split(',')

# 如果是空格分隔,用:
# uf['personal_interests'] = uf['personal_interests'].str.split()

修正后的两种实现方法

方法一:Pandas 原生方法

直接对列表列使用str.get_dummies,无需额外拼接:

uf_dummies = uf['personal_interests'].str.get_dummies()
print(uf_dummies)

如果你的列表元素原本是用特定符号分隔的字符串(比如"body|makeup"),也可以指定sep参数:

uf_dummies = uf['personal_interests'].str.get_dummies(sep='|')

方法二:MultiLabelBinarizer 方法

注意不要重复调用fit_transform(会覆盖之前的类别拟合),改用transform;同时确保输入是列表而非字符串:

from sklearn.preprocessing import MultiLabelBinarizer

mlb = MultiLabelBinarizer()
# 如果你需要强制包含指定类别(即使样本中没出现),用列表的列表形式拟合
mlb.fit([['body','men_skincare','tools','hand','makeup','hair', 'nail', 'skincare','men_fragrance','fragrance','foot']])

# 用transform而不是fit_transform,避免重新拟合数据
uf_dummies = pd.DataFrame(
    mlb.transform(uf['personal_interests']),
    columns=mlb.classes_,
    index=uf.index
)
print(uf_dummies)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 08:33:35