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

如何将含逗号分隔字符串列的Pandas DataFrame转换为0-1存在/缺失矩阵

问题解决代码与说明

你之前的代码仅适用于输入为字典的场景,当输入为DataFrame时,master.items()会遍历列名与对应列数据,因此得到的是列内值的出现次数,不符合需求。

实现思路

  1. 对存储列表的categories、CUI_desc两列分别做独立的多标签01编码,pandas内置的str.get_dummies()方法可以直接实现这个需求,不需要手动调用Counter
  2. 把两列的编码结果和原始保留列annotations按行拼接即可得到目标结果

完整可运行代码

import pandas as pd

# --------------- 示例数据构造,你使用自己的数据集时可删除这部分 ---------------
master = pd.DataFrame({
    'annotations': ['heroine', 'heroin', 'he smoked two packs a day'],
    'categories': [['heroic', 'opioid', 'substance_abuse'], ['heroic', 'opioid', 'substance_abuse'], ['opioid', 'substance_abuse']],
    'CUI_desc': [['C0011892___heroin'], ['C0011892___heroin'], ['C0439234___year', 'C0748223___QUIT', 'C0028040___nicotine']]
})
# -------------------------------------------------------------------------

# 核心处理逻辑
cat_onehot = master['categories'].str.join('|').str.get_dummies()
cui_onehot = master['CUI_desc'].str.join('|').str.get_dummies()

# 拼接保留列与编码结果
result = pd.concat([master['annotations'], cat_onehot, cui_onehot], axis=1)

# 输出验证
print(result)

特殊情况适配

如果你的categories和CUI_desc列存储的是字符串格式的列表(不是原生list类型),需要先加一步转列表的处理:

import ast
master['categories'] = master['categories'].apply(ast.literal_eval)
master['CUI_desc'] = master['CUI_desc'].apply(ast.literal_eval)

再运行核心处理逻辑即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 23:54:03