使用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
相关产品推荐
相关产品推荐

