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

如何使用Pandas展平包含多个嵌套字典的JSON响应?

问题描述

我收到如下JSON响应:

{
            "id": 7,
            "status": "Public",
            "Options": [
                  {
                        "id": 8,
                        "pId": 7
                  },
                  {
                      "id": 9,
                        "pId": 10
                  }
               ]
}

我尝试用Pandas DataFrame将其展平,代码如下:

import pandas as pd

df = pd.DataFrame.from_dict(response_data)

# 拆分产品选项
df=df.join(pd.DataFrame(df["Options"].values.tolist()).add_prefix('Options_'))
df = df.drop(columns=["Options"])

# 拆分嵌套产品选项
df=df.join(pd.DataFrame(df["Options_0"].values.tolist()).add_prefix('Options0_'))
df = df.drop(columns=["Options_0"])

这段代码在响应仅包含一个Options元素时可以正常工作:

{
            "id": 7,
            "status": "Public",
            "Options": [
                  {
                        "id": 8,
                        "pId": 7
                  }
              ]
}

但现在JSON响应中有多个Options元素,我该如何迭代处理,得到如下格式的DataFrame?

id   status   Options_0_id  Options_0_pId    Options_1_id  Options_1_pId
7     Public     8                  7           9            10    
解决方案

可以通过将Options列展开为多层DataFrame后重命名列名的方式,一次性处理所有嵌套的Options元素,无需手动逐个迭代:

import pandas as pd

response_data = {
            "id": 7,
            "status": "Public",
            "Options": [
                  {
                        "id": 8,
                        "pId": 7
                  },
                  {
                      "id": 9,
                        "pId": 10
                  }
               ]
}

# 初始DataFrame,用列表包裹确保生成单行数据
df = pd.DataFrame.from_dict([response_data])

# 展开Options列成多层结构的DataFrame
options_df = df['Options'].apply(pd.Series).stack().apply(pd.Series).unstack()

# 重命名列,统一格式为 Options_<索引>_<字段名>
options_df.columns = [f'Options_{i}_{col}' for i, col in options_df.columns]

# 删除原Options列后,拼接展开的选项数据
result_df = df.drop(columns=['Options']).join(options_df)

print(result_df)

运行后输出的DataFrame即为目标格式:

id  status  Options_0_id  Options_0_pId  Options_1_id  Options_1_pId
0   7  Public             8              7             9             10

代码说明

  1. df['Options'].apply(pd.Series):将每行的Options列表转化为子DataFrame,每行对应一个Options元素
  2. stack().apply(pd.Series).unstack():把子DataFrame中的字典元素展开为具体字段,同时保留Options的索引(0、1...)
  3. 列名重命名:将多层列索引合并为Options_<索引>_<字段名>的统一格式
  4. 表拼接:删除原Options列后,将展开的选项数据与原表合并

这种方法可自动适配任意数量的Options元素,无需手动编写针对单个索引的拆分逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 02:45:43