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

如何对DataFrame中存储列表的类别列应用One-Hot Encoder?

对列表型分类列实现One-Hot编码的内置工具方案

假设我们有如下DataFrame:

IDCATEGORIES
0['A']
1['A', 'C']
2['B', 'C']

我们需要将CATEGORIES列转换为One-Hot编码,预期结果如下:

IDABC
0100
1101
2011

无需自行编写低效代码,Python已有成熟工具包可以高效实现该需求,以下是两种常用方案:

方案一:使用Pandas内置方法

Pandas的字符串处理工具可以直接适配列表型字段,结合str.join和str.get_dummies快速生成编码:

import pandas as pd

# 构造示例数据
df = pd.DataFrame({
    'ID': [0, 1, 2],
    'CATEGORIES': [['A'], ['A', 'C'], ['B', 'C']]
})

# 将列表转为分隔符连接的字符串,再生成One-Hot编码
one_hot = df['CATEGORIES'].str.join('|').str.get_dummies(sep='|')

# 合并原ID列与编码结果
result = pd.concat([df['ID'], one_hot], axis=1)
print(result)

方案二:使用Scikit-learn的MultiLabelBinarizer

如果需要和机器学习流程整合,scikit-learn的MultiLabelBinarizer是专门针对多标签(列表型分类)的编码工具:

import pandas as pd
from sklearn.preprocessing import MultiLabelBinarizer

# 构造示例数据
df = pd.DataFrame({
    'ID': [0, 1, 2],
    'CATEGORIES': [['A'], ['A', 'C'], ['B', 'C']]
})

# 初始化多标签二值化器并完成编码
mlb = MultiLabelBinarizer()
one_hot_array = mlb.fit_transform(df['CATEGORIES'])
one_hot_df = pd.DataFrame(one_hot_array, columns=mlb.classes_)

# 合并原ID列与编码结果
result = pd.concat([df['ID'], one_hot_df], axis=1)
print(result)

两种方案均适配大规模数据场景,效率远高于手动编写循环逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 13:20:49