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

Pandas嵌套字典转DataFrame时空字典行填充0的解决方法

解决方法

你遇到的空字典行缺失问题,是pandas from_dict 方法处理orient='index'参数时的默认表现,不需要修改原始数据,在原有代码基础上补全空值填充逻辑即可,最简实现如下:

import pandas as pd

objs = {
 '2022-05-12Delhivery Goa Warehouse': {'Blue Racks': 6, 'HPT': 6, 'Plastic Pallet': 40, 'Trolley': 48}, 
 '2022-05-15Delhivery Goa Warehouse': {'Blue Racks': 6, 'HPT': 6, 'Plastic Pallet': 40, 'Trolley': 48},  
 '2022-05-18Delhivery Goa Warehouse': {'Blue Racks': 6, 'HPT': 6, 'Plastic Pallet': 40, 'Trolley': 48}, 
 '2022-05-19Delhivery Goa Warehouse': {'Blue Racks': 6, 'HPT': 6, 'Plastic Pallet': 40, 'Trolley': 48}, 
 '2022-05-19Delhivery Tauru Warehouse': {},
 '2022-05-20Delhivery Goa Warehouse': {}  
 }

df_origcount = pd.DataFrame.from_dict(objs, orient='index')
# 重置索引后将空值填充为0,同时转换为整数类型避免出现浮点值
df_origcount = df_origcount.reset_index().fillna(0).astype(
    {col: 'int' for col in df_origcount.columns}
)

运行后得到的结果完全匹配预期:空字典对应的行所有设备字段值均为0,原有非空行数据保持不变。


如果你的pandas版本过低,上述方法无法正确识别空字典对应的行,可以先预处理原始字典,给空值条目补全默认值后再做转换:

# 提取所有出现过的设备列名
all_equipment = set()
for warehouse_data in objs.values():
    all_equipment.update(warehouse_data.keys())

# 遍历字典给空条目填充各设备默认值0
processed_objs = {}
for warehouse_name, equipment_count in objs.items():
    if not equipment_count:
        processed_objs[warehouse_name] = {eq: 0 for eq in all_equipment}
    else:
        processed_objs[warehouse_name] = equipment_count

# 转换后无需额外处理空值
df_origcount = pd.DataFrame.from_dict(processed_objs, orient='index').reset_index()

注:你给出的预期结果中最后三行的索引值均标注为3属于手误,正常执行reset_index()后会生成0到5的连续自增序号。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 11:36:20