API规格变更后JSON转为pandas DataFrame报错该如何解决?
解决方案
错误原因
新版API返回的JSON结构嵌套了两层data字段:顶层的data是字典类型,你需要的目标列表存储在顶层data下的内层data字段里。你之前的两种写法都没有定位到正确的列表路径,所以触发类型错误:
- 调用
json_normalize(data, ['data'])时,取到的是顶层data对应的字典{"data": [xxx]},不是要求的列表类型 - 调用
pd.DataFrame.from_records(data)时,是直接把JSON顶层的三个键(status、code、data)传入转换,结构完全不匹配
调整方案
方案1:直接提取目标列表生成DataFrame(兼容原有逻辑,写法最简单)
仅需修改目标数据的提取路径即可,代码如下:
import json import pandas as pd jsonfile = 'file.json' with open(jsonfile) as j: data = json.load(j) # 直接提取内层data的列表数据 rows = data["data"]["data"] df = pd.DataFrame(rows, columns=['id', 'name', 'score', 'average'])
方案2:使用json_normalize的正确写法
如果要使用json_normalize,需要指定两层data的嵌套路径作为记录路径:
import json import pandas as pd jsonfile = 'file.json' with open(jsonfile) as j: data = json.load(j) # record_path传入嵌套的key路径 df = pd.json_normalize(data, record_path=['data', 'data'])
内容的提问来源于stack exchange,提问作者p3hndrx
相关产品推荐
相关产品推荐

