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

如何将DataFrame中包含列表的列转换为独热编码列?

如何将DataFrame中包含列表的列转换为独热编码列?

嗨,这个需求我平时处理数据时也常碰到,给你分享两个高效的实现方法,都是亲测好用的:

先把你的示例数据贴出来,方便对照操作:

import pandas as pd 
import numpy as np 

df = pd.DataFrame({'id':range(1,4), 
                   'items':[['A', 'B'], ['A', 'B', 'C'], ['A', 'C']]})

方法一:纯Pandas实现(无需额外库)

这种方法不用导入其他工具,靠Pandas自带的方法就能搞定,步骤清晰还简洁:

  1. 把items列的列表展开成多层索引结构
  2. 对展开后的元素生成独热编码
  3. 按原DataFrame的索引求和,得到每行对应的编码结果
  4. 最后把编码结果和原DataFrame合并

代码如下:

# 生成独热编码部分
one_hot = pd.DataFrame(df['items'].tolist()).stack().str.get_dummies().sum(level=0)
# 合并到原DataFrame
result = pd.concat([df, one_hot], axis=1)
print(result)

运行后就能得到你想要的输出:

id       items  A  B  C
0   1      [A, B]  1  1  0
1   2  [A, B, C]  1  1  1
2   3      [A, C]  1  0  1

方法二:用sklearn的MultiLabelBinarizer(多标签场景更直观)

如果你的项目已经在使用sklearn,那这个方法逻辑更直白,专门针对多标签的编码需求:

  1. 导入MultiLabelBinarizer类
  2. 用它拟合并转换items列的列表数据
  3. 把转换结果转成DataFrame,指定列名为对应的标签
  4. 和原DataFrame合并即可

代码示例:

from sklearn.preprocessing import MultiLabelBinarizer

mlb = MultiLabelBinarizer()
# 转换数据并生成对应DataFrame
one_hot = pd.DataFrame(mlb.fit_transform(df['items']), columns=mlb.classes_, index=df.index)
# 合并数据
result = pd.concat([df, one_hot], axis=1)
print(result)

这个方法的输出和第一种完全一致,而且如果items里出现新的标签,它会自动识别并生成对应列,用起来特别省心。

你可以根据自己的项目环境选合适的方法,两种都能高效完成需求~

备注:内容来源于stack exchange,提问作者DaCard

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 17:53:11