You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从API返回的嵌套JSON列表中提取所有serie数据并转为DataFrame?

如何从嵌套JSON中提取所有serie数据到Pandas DataFrame(不依赖位置索引)

我从API获取了如下格式的JSON响应:

[
  {
    "id": "1",
    "variable": "x",
    "unt": "%",
    "results": [
      {
        "classification": [
          {
            "id": "1",
            "name": "group",
            "category": {
              "555": "general"
            }
          }
        ],
        "series": [
          {
            "location": {
              "id": "1",
              "level": {
                "id": "n1",
                "name": "z"
              },
              "name": "z"
            },
            "serie": {
              "202001": "0.08",
              "202002": "0.48",
              "202003": "0.19"
            }
          }
        ]
      }
    ]
  }
]

我现在可以通过索引[0]提取首个serie的数据并转为DataFrame,但当存在多条记录时,这种方法无法获取全部数据:

content = val[0]["results"][0]["series"][0]["serie"]
df = pd.DataFrame(content.items())
df
        0     1
0  202001  0.08
1  202002  0.48
2  202003  0.19

请问有没有不依赖位置索引来获取所有相关serie数据的方法?


没问题,要处理这种嵌套的JSON结构,我们可以通过遍历所有层级的列表来收集所有serie数据,而不是硬编码索引[0]。这里有几种实用的方法:

方法1:嵌套循环收集所有serie数据

用多层循环逐个遍历每个层级的列表,把所有serie的键值对收集到一个统一的列表中,最后转为DataFrame:

import pandas as pd

# 假设val是你从API获取的JSON数据
all_series = []

# 遍历最外层的顶级条目
for item in val:
    # 遍历当前条目下的所有results
    for result in item["results"]:
        # 遍历当前result下的所有series条目
        for series_entry in result["series"]:
            # 提取当前serie的日期和数值,存入列表
            for date, value in series_entry["serie"].items():
                all_series.append({"date": date, "value": value})

# 转换为DataFrame
df = pd.DataFrame(all_series)

这种写法逻辑清晰,不管每个层级有多少条数据,都会被全部收集到,完全不依赖固定索引。

方法2:用列表推导式简化代码

如果喜欢更紧凑的写法,可以用多层列表推导式替代循环,效果和方法1完全一致:

import pandas as pd

all_series = [
    {"date": date, "value": value}
    for item in val
    for result in item["results"]
    for series_entry in result["series"]
    for date, value in series_entry["serie"].items()
]

df = pd.DataFrame(all_series)

方法3:保留额外上下文信息(可选)

如果需要把variable、location等关联信息也保留到DataFrame里,方便后续多维度分析,可以稍微调整代码:

import pandas as pd

all_series = []

for item in val:
    # 提取当前条目的变量信息
    variable = item["variable"]
    for result in item["results"]:
        for series_entry in result["series"]:
            # 提取位置相关信息
            location_name = series_entry["location"]["name"]
            location_level = series_entry["location"]["level"]["name"]
            # 把上下文信息和serie数据一起存入
            for date, value in series_entry["serie"].items():
                all_series.append({
                    "variable": variable,
                    "location": location_name,
                    "location_level": location_level,
                    "date": date,
                    "value": value
                })

df = pd.DataFrame(all_series)

这样得到的DataFrame会包含更丰富的维度信息,实用性更强。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 10:35:41