如何将API返回的嵌套JSON正确转换为目标结构的pandas DataFrame
问题原因
直接将json_data['data']传入pandas DataFrame构造函数时,pandas会默认将data下的所有一级键(list/page/size/maxPage/totalSize)识别为列名。其中list是存储业务数据的数组,数组长度为2,因此pandas会将数组内的两个字典作为list列的行值;其余分页字段都是单值,会自动广播填充到所有行,最终得到的结果就会出现分页字段重复、字典塞在单列的问题。
可行解决方案
你需要直接提取data节点下的list数组作为DataFrame的构造数据源,这个数组里的每个字典正好对应一行表格数据,修改后的代码如下:
import requests import pandas as pd import json response = requests.get(url) json_data = json.loads(response.text) # 直接读取list数组构造DataFrame df = pd.DataFrame(json_data['data']['list'])
注意:你提供的示例JSON中,第二条数据的地址字段存在拼写错误,键名写为
adress(正确拼写为address,少一个字母d),如果实际接口返回确实存在这类键名不一致的问题,可以追加一行代码统一列名:df = df.rename(columns={'adress': 'address'})
运行上述代码后,就能得到你期望的表格结构:
address name shares amount active 0 abcdxyz Jack 396 490 True 1 efghklm Mary 789 890 True
如果需要保留分页相关的元信息,不需要和业务列表数据混存在同一张表里,单独提取为变量即可:
page_meta = { "page": json_data['data']['page'], "size": json_data['data']['size'], "maxPage": json_data['data']['maxPage'], "totalSize": json_data['data']['totalSize'] }
内容的提问来源于stack exchange,提问作者Alper
相关产品推荐
相关产品推荐

