如何将嵌套Python对象或JSON高效映射为pandas DataFrame并保留上层属性
解决方案
方法:使用pandas内置json_normalize直接处理原始JSON(效率最优)
该方法为pandas官方提供的嵌套JSON结构化方案,内部实现已做性能优化,无需手动编写冗余循环,也不会出现上层属性丢失的问题。
完整代码如下:
import json import pandas as pd # raw为你的原始JSON字符串 data = json.loads(raw) df = pd.json_normalize( data, # 指定最内层需要展开为独立行的列表路径 record_path=['Container', 'DistributionOptions', 'OptionSet', 'Lines'], # 指定需要保留的上层字段路径,这些字段会自动对应填充到每一行 meta=[ ['Container', 'DistributionOptions', 'OptionId'], ['Container', 'DistributionOptions', 'OptionSet', 'Location', 'Number'] ] ) # 调整列名和列顺序为目标格式 df = df.rename(columns={ 'Container.DistributionOptions.OptionId': 'OptionId', 'Container.DistributionOptions.OptionSet.Location.Number': 'Location' })[['OptionId', 'Location', 'OrderLineId', 'Quantity']]
如果你需要继续使用已生成的SimpleNamespace对象
只需要先将SimpleNamespace递归转换为字典,再调用上述json_normalize方法即可:
from types import SimpleNamespace def sn_to_dict(obj): if isinstance(obj, SimpleNamespace): return {k: sn_to_dict(v) for k, v in vars(obj).items()} elif isinstance(obj, list): return [sn_to_dict(item) for item in obj] else: return obj # 转换你已有的python_object data = sn_to_dict(python_object) # 后续使用和上面完全一致的json_normalize逻辑即可
最终输出的df完全匹配你给出的目标结构。
内容的提问来源于stack exchange,提问作者StackerDekker
相关产品推荐
相关产品推荐

