
本文介绍两种高效方法,将键值为不等长字符串列表的字典(如 {'A': ['CATEGORY 2'], 'B': ['CATEGORY 1', 'CATEGORY 2']})转换为以键为行、所有出现过的类别为列的二元(或标记型)汇总 DataFrame,支持空值自动补零或填充 'x'。
本文介绍两种高效方法,将键值为不等长字符串列表的字典(如 `{'a': ['category 2'], 'b': ['category 1', 'category 2']}`)转换为以键为行、所有出现过的类别为列的二元(或标记型)汇总 dataframe,支持空值自动补零或填充 `'x'`。
在数据分析中,常需将嵌套结构(如字典中每个 key 对应一个类别列表)展平为“宽格式”汇总表,便于可视化或后续统计。原始字典中各列表长度不一(如 'C': [] 为空),直接用 pd.DataFrame.from_dict(..., orient='index') 会导致列对齐失败——因为 pandas 默认按位置展开,而非按类别语义对齐。
✅ 推荐方案一:使用 str.get_dummies()(语义清晰、一行式表达)
import pandas as pd
response = {
'A': ['CATEGORY 2'],
'B': ['CATEGORY 1', 'CATEGORY 2'],
'C': [],
'D': ['CATEGORY 3'],
}
# 步骤解析:
# 1. 将每个列表用 '|' 连接成字符串(如 ['CATEGORY 1','CATEGORY 2'] → 'CATEGORY 1|CATEGORY 2')
# 2. 构建 Series,index 为原始 keys(即 ITEM),便于后续索引对齐
# 3. 调用 str.get_dummies() 自动识别所有唯一类别并生成 0/1 矩阵
# 4. 可选:replace({1: 'x', 0: ''}) 实现符号化显示(注意:替换后列类型变为 object)
out = (
pd.Series(map('|'.join, response.values()), index=response.keys())
.rename_axis('ITEM')
.str.get_dummies()
.reset_index()
)
print(out)
输出:
ITEM CATEGORY 1 CATEGORY 2 CATEGORY 3 0 A 0 1 0 1 B 1 1 0 2 C 0 0 0 3 D 0 0 1
若需显示 'x' 而非 1,取消注释 .replace({0: '', 1: 'x'}) 即可(注意:此操作会将数值列转为字符串列,影响数值计算)。
✅ 推荐方案二:字典推导 + pd.DataFrame.from_dict()(逻辑直观、完全可控)
# 构造中间字典:{item: {category: 'X', ...}, ...}
# 空列表自动映射为空字典 → 对应行全为 NaN,fillna(0) 或直接保留空
intermediate = {
k: {v: 'X' for v in lst}
for k, lst in response.items()
}
out = pd.DataFrame.from_dict(intermediate, orient='index') \
.rename_axis('ITEM') \
.reset_index() \
.fillna('') # 将 NaN 替换为空字符串,保持 'X' 标记风格
print(out)
输出(带 'X' 标记):
ITEM CATEGORY 1 CATEGORY 2 CATEGORY 3 0 A X 1 B X X 2 C 3 D X
? 关键注意事项:
- str.get_dummies() 要求输入为字符串 Series;空列表经 '|'.join([]) 得到空字符串 '',get_dummies() 会为其生成全零行,行为稳定。
- 方案二中,fillna('') 应在 reset_index() 后执行,避免索引列被误填。
- 若类别名含特殊字符(如空格、斜杠),get_dummies() 默认能正确处理;但若用于机器学习特征工程,建议提前标准化类别名(如 .str.replace(r'\s+', '_', regex=True))。
- 两种方法均自动提取全部唯一类别作为列名,无需手动去重或排序;如需固定列顺序,可在最后用 reindex(columns=['ITEM', 'CATEGORY 1', 'CATEGORY 2', 'CATEGORY 3'])。
综上,str.get_dummies() 更简洁且内置健壮性高,适合快速原型;字典推导法则更易调试和定制(如支持多值权重、自定义标记符),适合生产环境灵活扩展。











