如何将带嵌套子节点的Python API JSON转为pandas DataFrame并解包子节点
嵌套JSON转Pandas DataFrame子节点解包方案
直接使用pd.read_json处理嵌套JSON时,默认不会展开嵌套的字典、列表字段,会导致内容集中在同一列,使用pandas内置的json_normalize函数即可实现嵌套结构的自动展平。
步骤1:导入依赖并读取JSON数据
import pandas as pd import json # 本地JSON文件读取示例 with open("你的API返回JSON文件路径.json", "r", encoding="utf-8") as f: json_data = json.load(f) # 如果是直接调用API获取的响应,直接用响应的json结果即可,示例: # import requests # resp = requests.get("你的API地址") # json_data = resp.json()
步骤2:用json_normalize展平嵌套结构
场景1:JSON为纯嵌套字典/字典列表,无外层包裹字段
直接传入JSON数据即可自动展开所有子节点:
df = pd.json_normalize(json_data) # 自定义层级分隔符,默认是.,可以改为下划线等 # df = pd.json_normalize(json_data, sep="_")
场景2:API返回有外层公共字段,业务数据存在指定列表字段中
比如常见的返回结构为{"code":200, "msg":"success", "data": [嵌套业务数据列表]},需要指定record_path参数定位到业务数据列表,还可以通过meta参数保留外层公共字段:
# 仅提取data字段下的业务数据并展平 df = pd.json_normalize(json_data, record_path="data") # 如果需要保留外层的code、msg字段可以这么写 # df = pd.json_normalize(json_data, record_path="data", meta=["code", "msg"])
常见调整需求
- 去掉层级字段前缀:比如展平后字段名为
info.name、info.age,可以批量重命名去掉前缀
df.columns = df.columns.str.replace("info.", "", regex=False)
- 遇到嵌套列表字段:先用
df = df.explode("列表字段名")把列表拆成多行,再对该列做二次json_normalize处理后合并回原表。
内容的提问来源于stack exchange,提问作者user3738933
相关产品推荐
相关产品推荐

