如何通过Python pandas正确读取多层嵌套JSON文件
问题原因
pd.json_normalize的record_path参数要求传入从JSON根节点到目标数据层的完整层级路径,你之前直接传入最内层的OccuCode、OccuDesc,程序在根节点找不到对应键,就会抛出KeyError。
你当前的JSON结构链路为:根节点 → WTFY_Combined → 3层中间嵌套 → OccuMa → 目标字段OccuCode/OccuDesc,必须先把路径补全到OccuMa层,才能正确提取下属字段。
实现代码
import pandas as pd import json # 加载本地JSON文件 with open("你的JSON文件实际路径", "r", encoding="utf-8") as f: raw_data = json.load(f) # 补全从根节点到OccuMa层的完整路径,替换下方列表里的中间层键名为你实际JSON里的对应键名 # 路径格式为 [顶层键, 第二层键, 第三层键, 第四层键, 'OccuMa'] occu_ma_full = pd.json_normalize( raw_data, record_path=["WTFY_Combined", "中间第二层键名", "中间第三层键名", "中间第四层键名", "OccuMa"] ) # 拆分出两个独立DataFrame df_occu_code = occu_ma_full[["OccuCode"]].copy() df_occu_desc = occu_ma_full[["OccuDesc"]].copy()
路径核对方法
如果不确定中间三层的具体键名,不用硬猜,逐层打印键值即可快速定位:
# 查看顶层所有键 print("顶层键列表:", list(raw_data.keys())) # 查看WTFY_Combined下的键,如果该层值是列表,就取第一个元素查键:raw_data["WTFY_Combined"][0].keys() print("WTFY_Combined层键列表:", list(raw_data["WTFY_Combined"].keys())) # 按照上面的逻辑逐层往下查,直到找到OccuMa所在位置,把路径按顺序填到record_path的列表里就行
小提示:如果某一层的取值是数组(列表类型),取列表第一个元素调用
.keys()就能看到该层下的所有键名。
内容的提问来源于stack exchange,提问作者user3521180
相关产品推荐
相关产品推荐

