You need to enable JavaScript to run this app. Python如何从API嵌套JSON提取指定字段生成Pandas DataFrame
优惠活动
大模型
产品
解决方案
定价
更多

Python如何从API嵌套JSON提取指定字段生成Pandas DataFrame

嵌套JSON定向提取生成Pandas DataFrame实操方案

问题本质拆解

  • 你之前使用全量flatten方法不符合需求,核心原因是这类方法会把所有嵌套键值对无差别拆成平面对象,自然会带出大量冗余字段
  • 你使用json_normalize无法定位到目标events节点,是因为没有指定行数据的起始位置,默认从JSON最顶层开始逐层拆解,没法跳过前两层的无关结构
  • 你提供的示例JSON存在语法问题:实际API返回结构中,leagues节点下重复的events键一定是列表结构,否则JSON解析时会发生键值覆盖,无法保留多组赛事数据

方案1:手动定向层级遍历(新手零门槛适配)

这类方法完全绕开全量扁平化逻辑,只顺着目标字段的固定路径取值,完全可控不会带出冗余内容:

  • 初始化空列表存储每行有效数据
  • 逐层跳过无关中间节点,直接定位到第三层的events列表
  • 遍历每个event元素,仅提取需要的字段值,自动跳过不需要的字段
import pandas as pd
# 初始化存储行数据的列表
row_list = []
# 跳过schedule、leagues两层无关节点,直接定位到events列表
target_events = resp["schedule"]["leagues"]["events"]
for event in target_events:
    # 提取event层需要的取值(兼容示例中a=A、e=E的两种情况)
    base_val = event.get("a", event.get("e"))
    # 定位到event下嵌套的markets层
    market_info = event["markets"]
    # 提取markets层需要的取值,自动跳过c/g这类不需要的字段
    mid_val = market_info.get("b", market_info.get("f"))
    end_val = market_info.get("d", market_info.get("h"))
    # 打包为单行数据存入列表
    row_list.append({
        "base_value": base_val,
        "mid_value": mid_val,
        "end_value": end_val
    })
# 直接生成仅含目标字段的DataFrame
df = pd.DataFrame(row_list)

优势:逻辑完全透明,哪怕后续JSON结构有微调,只要调整路径取值的代码即可适配,不会出现全量扁平化后的字段错位问题

方案2:json_normalize 精准参数配置(无需手动循环)

你之前使用json_normalize没拿到有效结果,是因为没有用对核心参数,正确配置后可以直接跳过前两层节点,定向提取需要的字段:
关键参数说明:

  • record_path:传入数组形式的路径,直接指定每行数据的起点位置,这里直接定位到第三层的events节点,跳过前两层无关结构
  • meta:指定需要拉取的字段路径(支持嵌套层路径),不需要的字段完全不传入,自然不会出现在最终结果中
  • errors="ignore":避免部分节点缺字段时直接抛出报错
df = pd.json_normalize(
    data = resp,
    # 直接将行起点定位到第三层的events节点
    record_path = ["schedule", "leagues", "events"],
    # 仅配置需要拉取的字段路径
    meta = [
        ["a"], ["e"],
        ["markets", "b"], ["markets", "f"],
        ["markets", "d"], ["markets", "h"]
    ],
    errors = "ignore"
)
# 最后仅保留需要的列组合,删除所有冗余列
df = df[["a", "markets.b", "markets.d"]].rename(
    columns = {
        "a": "base_value",
        "markets.b": "mid_value",
        "markets.d": "end_value"
    }
)

优势:不需要编写手动循环逻辑,路径配置完成后即可直接生成目标结构的DataFrame

核心注意事项

  • 不需要强求全量扁平化:只要明确目标字段的完整路径,不管前面嵌套了多少层无关节点,直接顺着路径跳转取值即可
  • json_normalize支持任意深度的路径定位:不需要从JSON最顶层开始逐层拆解,只要传对record_path的路径数组,就可以把行起点设在任意深度的节点上
  • 丢弃冗余字段的逻辑非常简单:不管用哪种方法,只要最后在生成DataFrame时选取需要的列,就可以完全避免无关字段进入结果集,不需要在提取阶段就删除所有冗余内容

内容的提问来源于stack exchange,提问作者Minten

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.06 08:15:11