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

嵌套字典结构的response_json转换为指定格式pandas DataFrame

修正后的实现代码

import pandas as pd
import requests
from datetime import datetime

# 按示例格式生成asof_date
asof_date = datetime.now().strftime("%Y-%m-%d %H%M")
all_page_data = []

while True:
    try:
        # 直接取最外层的id,符合需求规则,避免正则匹配误差
        outer_id = response_json['id']
        indicator_dfs = []
        for rdata in response_json['insights']['data']:
            col_name = rdata['name']
            # 单指标数据格式化,保留end_time作为合并关联键
            single_indicator_df = pd.DataFrame(rdata['values']).rename(columns={'value': col_name})
            indicator_dfs.append(single_indicator_df)
        
        # 按时间合并当前页所有指标数据,同一时间点的指标落在同一行
        merged_page_df = indicator_dfs[0]
        for df in indicator_dfs[1:]:
            merged_page_df = merged_page_df.merge(df, on='end_time', how='outer')
        
        # 统一添加固定字段
        merged_page_df['id'] = outer_id
        merged_page_df['asof_date'] = asof_date
        all_page_data.append(merged_page_df)

        # 拉取下一页数据
        response = requests.get(response_json['paging']['next'])
        response_json = response.json()
    except KeyError:
        break

# 合并所有分页数据得到最终结果
final_df = pd.concat(all_page_data, ignore_index=True)
# 如果不需要保留end_time字段可以取消下面注释
# final_df = final_df.drop(columns=['end_time'])
# 如果只需要保留最新时间的一行数据可以取消下面注释
# final_df = final_df.sort_values('end_time').tail(1).reset_index(drop=True)

核心逻辑说明

  • 所有指标数据通过end_time做关联合并,保证同一时间点的多个指标值落在同一行
  • 直接取接口返回最外层的id字段,避免正则匹配每个指标id的误差
  • 分页数据全部处理完成后统一合并,最终得到完整的DataFrame
  • 示例原始数据运行后默认输出2行结果(对应两个时间点:2021-09-13、2021-09-14),无对应时间点数据的字段自动填充NaN,符合数据实际情况

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 05:24:01