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

Python:基于Pandas列表型字段生成哑变量的实现方案

解决字符串形式列表生成哑变量的问题

核心思路

先把字符串格式的列表转换成Pandas可识别的真实列表对象,再基于列表生成对应哑变量。

步骤与代码示例

假设你的样例DataFrame如下:

import pandas as pd
import ast

# 模拟样例数据
df = pd.DataFrame({
    'record_id': [101, 102, 103],
    'tech_fields_cited': ["['Y02P 20/10', 'Y02E 10/50']", "['Y02P 20/10']", "['Y02E 10/50', 'Y02T 10/70']"]
})

1. 将字符串列表转为真实列表

使用ast.literal_eval解析字符串格式的列表,这是处理合法Python字面量字符串最安全的方式:

df['tech_fields_cited'] = df['tech_fields_cited'].apply(ast.literal_eval)

2. 生成哑变量

提供两种高效实现方式:

方式一:简洁版(适合中小数据集)

直接将列表转为Series,填充缺失值为0后拼接回原DataFrame:

# 对每个列表生成对应分类的1值,其余为0
dummies = df['tech_fields_cited'].apply(lambda x: pd.Series(1, index=x)).fillna(0).astype(int)
# 拼接原数据和哑变量
final_df = pd.concat([df, dummies], axis=1)
方式二:高效版(适合大数据集)

通过拆分列表、生成哑变量再分组求和的方式,内存占用更低:

# 将列表拆分为每行一个分类
exploded_df = df.explode('tech_fields_cited')
# 生成分类的哑变量
dummies = pd.get_dummies(exploded_df['tech_fields_cited'])
# 按记录ID分组求和,还原每条记录的哑变量状态
dummies = dummies.groupby(exploded_df['record_id']).sum().reset_index()
# 合并回原DataFrame
final_df = pd.merge(df, dummies, on='record_id')

注意事项

  • 如果你的字符串列表格式不标准(比如没有引号、单双引号混合),可以用正则表达式提取分类标识,例如:
import re
df['tech_fields_cited'] = df['tech_fields_cited'].apply(lambda x: re.findall(r"'([^']+)'", x))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 06:30:47