如何将非均匀嵌套字典转为表格?解决Pandas ValueError报错
嵌套字典转指定列表格:报错解决与实现方案
报错原因
你写的代码直接将单个标量值的字典传入pd.DataFrame(),pandas要求如果所有值都是标量,必须指定索引,所以抛出ValueError: If using all scalar values, you must pass an index。而且原代码循环拆分了res的两个子字典,根本没法生成包含所有指定列的表格。
实现步骤与代码
要完成需求,得先把嵌套的字典扁平化,把深层的字段(比如Load.Stat.Code、Load.Stat.Reason)提取到顶层,再按指定列生成DataFrame:
import pandas as pd res = {'Head': {'Ide': 'GLE', 'ID': '7b', 'Source': 'CARS', 'Target': 'TULUM', 'Country': 'GL'}, 'Load': {'Stat': {'Code': '21', 'Reason': 'invalid'}, 'SrcFilePath': '/path.xls'}} # 扁平化嵌套字典,整合所有需要的字段 flat_data = {} # 导入Head层的全部字段 flat_data.update(res['Head']) # 导入Load.Stat下的字段 flat_data.update(res['Load']['Stat']) # 导入Load层的SrcFilePath字段 flat_data['SrcFilePath'] = res['Load']['SrcFilePath'] # 指定目标列顺序 target_columns = ['Ide', 'ID', 'Source', 'Target', 'Country', 'Code', 'Reason', 'SrcFilePath'] # 生成DataFrame:用列表包裹字典,避免标量值报错,同时指定列顺序 df = pd.DataFrame([flat_data], columns=target_columns) print(df)
运行结果
执行后会输出符合要求的表格:
Ide ID Source Target Country Code Reason SrcFilePath 0 GLE 7b CARS TULUM GL 21 invalid /path.xls
关键说明
- 用
update()方法可以快速合并字典的键值对,省去逐个赋值的麻烦 - 把字典放进列表
[flat_data],pandas会自动识别为一行数据,无需手动指定索引,完美解决原报错 - 通过
columns参数指定列顺序,确保输出和要求的列完全匹配
内容的提问来源于stack exchange,提问作者prj
相关产品推荐
相关产品推荐

