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

嵌套JSON转DataFrame遇TypeError:如何正确展平含列表的JSON?

解决多层嵌套JSON转Pandas DataFrame的TypeError问题

错误原因分析

你触发的TypeError: list indices must be integers or slices, not str是因为rawData['results']是列表类型,直接用rawData['results']['submissions']索引完全错误——列表只能用整数/切片定位元素,不能用字符串字段名。

正确的展平方法

假设你的rawData['results']结构是类似这样的列表(每个元素包含嵌套列表和元数据字段):

[
    {
        "application_name": "App1",
        "sponsor_name": "SponsorA",
        "submissions": [
            {"submission_id": "S1", "status": "approved"},
            {"submission_id": "S2", "status": "pending"}
        ]
    },
    # 更多类似对象...
]

1. 直接展平submissions列

基于rawData['results']列表,用pd.json_normalize指定要展开的嵌套路径和保留的元数据:

import pandas as pd

# 展平submissions列表,同时保留上层的application_name和sponsor_name
df_submissions = pd.json_normalize(
    data=rawData['results'],
    record_path='submissions',  # 指定要展开的嵌套列表字段名
    meta=['application_name', 'sponsor_name']  # 指定需要保留的顶级字段
)

2. 处理更深层嵌套(如submissions下的products)

如果submissions里还有products这类嵌套列表,用层级列表指定record_path,同时调整meta保留中间层级的字段:

# 展平submissions下的products列表,保留多层元数据
df_products = pd.json_normalize(
    data=rawData['results'],
    record_path=['submissions', 'products'],  # 嵌套路径:先取submissions,再取其中的products
    meta=[
        'application_name',
        'sponsor_name',
        ['submissions', 'submission_id']  # 保留submissions层级的submission_id
    ]
)

3. 基于初始部分展平的DataFrame处理

如果已经生成了初始的df_initial = pd.json_normalize(rawData['results']),也可以通过explode先展开submissions列,再对嵌套字典归一化:

# 先展开submissions列的列表
df_exploded = df_initial.explode('submissions').reset_index(drop=True)
# 归一化submissions字段,合并原有的元数据字段
df_submissions = pd.concat([
    df_exploded.drop('submissions', axis=1),
    pd.json_normalize(df_exploded['submissions'])
], axis=1)

关键注意点

  • pd.json_normalize的data参数必须是可迭代对象(如列表),每个元素是包含嵌套结构的字典。
  • record_path可以是字符串(单层级嵌套)或列表(多层级嵌套),指向要展开的列表字段。
  • meta参数用于指定需要保留的非列表字段,多层级字段同样用列表表示(如['submissions', 'submission_id'])。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 11:17:28