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

调用API获取JSON数据后循环遍历存入pandas DataFrame报错问询

错误原因&修正方案

核心错误点

  • 内层循环逻辑错误:for i in parse_json 遍历的是JSON返回体顶层字典的键(均为字符串类型,比如results、total_pages等),并非你需要的results数组的下标,将字符串作为列表索引直接触发类型错误。
  • 页码起始值错误:目标API的页码从1开始计数,原代码使用np.arange(0,7)生成0-6的页码,会导致第一页请求返回无效结果。

修正后可运行代码

import requests
import json
import pandas as pd

# 存储结果的列表
result_list = []
# 页码从1到7,无需引入numpy
for page in range(1, 8):
    url = f'https://www.federalregister.gov/api/v1/documents.json?conditions%5Bpublication_date%5D%5Bgte%5D=09%2F01%2F2021&conditions%5Bterm%5D=economy&order=relevant&page={page}'
    response_API = requests.get(url)
    # 仅处理请求成功的响应
    if response_API.status_code != 200:
        print(f"第{page}页请求失败,状态码:{response_API.status_code}")
        continue
    parse_json = json.loads(response_API.text)
    # 直接遍历results数组,无需手动处理索引
    for item in parse_json['results']:
        title = item['title']
        pub_date = item['publication_date']
        # 兼容agencies为空的情况,避免索引报错
        agency = item['agencies'][0]['name'] if item.get('agencies') else '无对应机构'
        result_list.append([title, pub_date, agency])

# 转DataFrame
cols = ["Title", "Date","Agency"]
df = pd.DataFrame(result_list, columns=cols)

额外优化建议

  • 可以加请求延迟,避免触发API频率限制,比如在循环末尾加time.sleep(1),需要提前导入time模块
  • 可以先取总页数动态生成循环范围,不用硬编码7页,从parse_json['total_pages']就能拿到总页数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 00:18:03