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

使用Python调用EIA API拉取数据时遭遇KeyError问题求助

解决EIA API请求中KeyError: 'series'的问题

你的问题出在对EIA API返回结构的错误假设上,以及未先验证API响应的实际内容。以下是具体排查和修复步骤:

1. 先查看API的实际返回内容

出现KeyError: 'series'说明你访问的键在返回的JSON里不存在。先修改代码打印完整响应内容,确认API返回的结构或错误信息:

import requests
import pandas as pd

url = "https://api.eia.gov/v2/electricity/rto/fuel-type-data/data/?frequency=hourly&data[0]=value&facets[respondent][]=ERCO&start=2018-07-01T00&end=2023-04-25T00&sort[0][column]=period&sort[0][direction]=desc&offset=0&length=5000&api_key=7xu8nejTweL67Zzzbsj2K4ngcGgTS828SqpfmSkD"

response = requests.get(url)
# 打印完整响应,排查结构或错误
print(response.json())

执行后你会发现:EIA v2 API的返回结构外层是response键,而非你代码中假设的series(series是旧版v1 API的结构)。如果请求存在问题(比如密钥无效、参数错误),返回内容里还会包含error字段说明具体原因。

2. 修正数据提取路径

针对EIA v2 API的正确结构,数据提取路径应为response.json()['response']['data'],修改后的完整代码如下:

import requests
import pandas as pd

url = "https://api.eia.gov/v2/electricity/rto/fuel-type-data/data/?frequency=hourly&data[0]=value&facets[respondent][]=ERCO&start=2018-07-01T00&end=2023-04-25T00&sort[0][column]=period&sort[0][direction]=desc&offset=0&length=5000&api_key=7xu8nejTweL67Zzzbsj2K4ngcGgTS828SqpfmSkD"

response = requests.get(url)
# 先检查HTTP请求是否成功
if response.status_code == 200:
    json_data = response.json()
    # 检查API是否返回错误信息
    if 'error' in json_data:
        print(f"API请求错误: {json_data['error']}")
    else:
        # 从正确路径提取数据
        data = json_data['response']['data']
        df = pd.DataFrame(data)
        # 按需筛选period和value列
        df = df[['period', 'value']]
        print(df)
else:
    print(f"HTTP请求失败,状态码: {response.status_code}")

3. 额外排查点

  • 确认API密钥有效性:如果密钥过期或无效,API会返回明确的错误提示
  • 检查请求参数:比如facets[respondent][]=ERCO是否为有效的respondent代码,时间范围是否符合API要求
  • 注意API调用频率限制:EIA API有请求次数上限,超过限制会返回错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 13:25:23