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

如何遍历DataFrame行调用单个API批量获取气象站年度数据

解决你的气象API调用问题

嘿,我来帮你搞定这个问题!你的代码里有几个关键问题导致了那个InvalidSchema报错,咱们一步步理清楚并修正:

错误根源分析

  • URL构建错误:你在拼接URL时用了distances['API ID'],这是整个DataFrame的列(所有站点ID的集合),不是当前要请求的单个站点ID。这会让URL里混入类似0 "http://..." Name : API ID, Length: 497...的无效内容,直接触发了连接适配器找不到的错误。
  • 函数逻辑混乱:callAPI函数接收的是单个站点ID,但里面却写了for IDs in range(len(API_id))——这里API_id是单个字符串,len(API_id)是字符串的长度,完全不是遍历站点的逻辑。而且函数没有return任何数据,导致调用后data是None,根本没法存入列表。

修正后的完整代码

import requests
import pandas as pd

def callAPI(api_id):
    # 用f-string拼接正确的URL,确保只传入单个站点ID
    url = (
        f'http://www.ncei.noaa.gov/access/services/data/v1?dataset=daily-summaries'
        f'&dataTypes=PRCP,SNOW,TMAX,TMIN&stations={api_id}'
        f'&startDate=2020-01-01&endDate=2020-12-31&includeAttributes=0'
        f'&includeStationName=true&units=standard&format=json'
    )
    try:
        # 发送GET请求,添加超时避免程序卡住
        response = requests.get(url, timeout=10)
        # 检查请求是否成功,失败则抛出异常
        response.raise_for_status()
        # 返回解析后的JSON数据
        return response.json()
    except requests.exceptions.RequestException as e:
        # 捕获请求异常,打印错误信息方便排查
        print(f"请求站点 {api_id} 时出错: {str(e)}")
        return None

# 初始化列表存储所有站点的气象数据
all_station_data = []
# 这里替换成你的原始distances DataFrame
# distances = pd.read_csv("你的文件路径.csv")

# 遍历每个站点
for _, row in distances.iterrows():
    station_name = row['Closest Station']
    api_id = row['API ID']
    print(f"正在获取站点 {station_name} ({api_id}) 的数据...")
    # 调用API获取当前站点的数据
    station_data = callAPI(api_id)
    if station_data:
        # 给每条日数据添加站点名称和ID,方便后续区分
        for daily_record in station_data:
            daily_record['Closest Station'] = station_name
            daily_record['API ID'] = api_id
        # 将当前站点的所有日数据加入总列表
        all_station_data.extend(station_data)

# 将所有数据合并成一个最终的DataFrame
final_weather_df = pd.DataFrame(all_station_data)
# 查看结果前5行
print(final_weather_df.head())

关键修正点说明

  1. 正确拼接URL:用f-string替代字符串加法,既清晰又能确保只传入单个站点ID,避免无效URL。
  2. 完善函数逻辑:callAPI现在专门处理单个站点的请求,返回解析后的JSON数据,还添加了异常处理——某个站点请求失败时,程序不会崩溃,还能打印错误信息帮你排查。
  3. 优化数据存储:把站点名称和ID添加到每条日数据中,这样最终的DataFrame能明确区分不同站点的数据;用extend替代append,把每个站点的多条日数据平铺开,避免嵌套列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 09:57:44