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

如何将多个Python字典合并行对齐列生成缺省值补0的Pandas DataFrame

Python多字典按行对齐转Pandas DataFrame实现方案

你的需求Pandas有原生支持的实现方式,不需要手动逐个管理列字段,两种常用实现方案如下:

首先是输入示例:

a = {'name': 'name1', 'one': 123, 'two':456, 'three': 789}
b = {'name': 'name2', 'ten': 1230, 'eleven':4560, 'twelve': 7890}
c = {'name': 'name3', 'fifty': 12300, 'sixty':45600, 'seventy': 78900}

方案1:无自定义列顺序需求,最简实现

Pandas的DataFrame构造器默认支持传入字典列表,会自动将所有字典的键对齐为列,缺失值填充为NaN,后续替换为0再设置索引即可:

import pandas as pd

# 把所有待合并字典放入列表
dict_list = [a, b, c]
# 自动对齐列、填充缺失值、设置name为行索引
df = pd.DataFrame(dict_list).fillna(0).set_index('name').astype(int)
print(df)

方案2:需要自定义列顺序的可控实现

如果需要严格按照列首次出现的顺序排布,可先提前收集所有列名,再传入构造器:

import pandas as pd

dict_list = [a, b, c]
# 收集除name外的所有列名,去重保留首次出现顺序
all_cols = []
for d in dict_list:
    for k in d.keys():
        if k != 'name' and k not in all_cols:
            all_cols.append(k)
# 构造时指定列顺序
df = pd.DataFrame(dict_list, columns=['name'] + all_cols).fillna(0).set_index('name').astype(int)
print(df)

两种方案输出结果均符合你的预期:

one  two  three   ten  eleven  twelve  fifty  sixty  seventy
name                                                                
name1  123  456    789     0       0       0      0      0        0
name2    0    0      0  1230    4560    7890      0      0        0
name3    0    0      0     0       0       0  12300  45600    78900

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 03:27:01