如何将多个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
相关产品推荐
相关产品推荐

