【问题标题】:How to get data from nested list in response.json()如何从 response.json() 中的嵌套列表中获取数据
【发布时间】:2023-01-18 05:20:15
【问题描述】:

以下架构中的 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"
            }
          }
        ]
      }
    ]
  }
]

我想将数据从 "serie" 键转换为 pandas 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

但是如果有多个记录,由于位置参数[0],那将只能从第一个元素获取数据。

有没有办法在不考虑位置参数的情况下检索该数据?

【问题讨论】:

  • 您是否正在寻找类似 - pd.json_normalize(data, ['results', ['series']]) 的内容,其中 data 是您的 json 响应?
  • 在那种情况下,数据将以不同的列出现,但我希望它以行的形式出现。怎么才能换行呢?

标签: python pandas python-requests


【解决方案1】:

尝试:

val = [
    {
        "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"},
                    }
                ],
            }
        ],
    },
    {
        "id": "2",
        "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": "1.08", "202002": "1.48", "202003": "1.19"},
                    }
                ],
            }
        ],
    },
]

df = pd.DataFrame(
    [k, v]
    for i in val
    for ii in i["results"]
    for s in ii["series"]
    for k, v in s["serie"].items()
)
print(df)

印刷:

        0     1
0  202001  0.08
1  202002  0.48
2  202003  0.19
3  202001  1.08
4  202002  1.48
5  202003  1.19

【讨论】:

    猜你喜欢
    • 2022-12-12
    • 1970-01-01
    • 2017-11-14
    • 1970-01-01
    • 2018-05-28
    • 2021-11-22
    • 2021-10-20
    • 1970-01-01
    • 2022-10-12
    相关资源
    最近更新 更多