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

如何将嵌套结构数据转为含指定字段的Python Pandas DataFrame

嵌套JSON生成指定列Pandas DataFrame的正确方法

原始数据

test={"data": [{"name": "john",
   "insights": {"data": [{"id": "123",
      "person_id": "456",
      "date_start": "2022-12-31",
      "date_stop": "2023-01-29",
      "impressions": "4070",
      "spend": "36.14"}],
    "paging": {"cursors": {"before": "MAZDZD", "after": "MAZDZD"}}},
   "id": "978"}]}

错误原因分析

  • test['data']是列表类型(里面包含一个用户字典),直接用test['data']['insights']会触发list indices must be integers or slices, not str错误,列表只能用整数索引访问元素。
  • 用data.append(test['data'])生成的DataFrame会把insights作为嵌套列,无法直接提取里面的impressions、spend等字段。

正确实现代码

处理单用户单条insights数据的情况

import pandas as pd

# 提取外层用户数据(test['data']是列表,取第一个元素)
user_info = test['data'][0]
# 提取insights里的具体数据(同样是列表,取第一个元素)
insights_info = user_info['insights']['data'][0]

# 组合需要的字段
target_data = {
    'name': user_info['name'],
    'date_start': insights_info['date_start'],
    'date_stop': insights_info['date_stop'],
    'impressions': insights_info['impressions'],
    'spend': insights_info['spend']
}

# 生成DataFrame
df = pd.DataFrame([target_data])
print(df)

处理多用户/多条insights数据的通用情况

如果test['data']包含多个用户,或者每个用户的insights['data']有多条记录,可以用循环遍历:

import pandas as pd

result_list = []
# 遍历每个用户
for user in test['data']:
    # 遍历该用户的每条insights记录
    for insight in user['insights']['data']:
        result_list.append({
            'name': user['name'],
            'date_start': insight['date_start'],
            'date_stop': insight['date_stop'],
            'impressions': insight['impressions'],
            'spend': insight['spend']
        })

df = pd.DataFrame(result_list)
print(df)

输出结果

运行后会得到包含指定列的DataFrame:

name  date_start   date_stop impressions  spend
0  john  2022-12-31  2023-01-29        4070  36.14

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 01:10:28