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

如何同时遍历多个API调用与字典键,提取OpenWeatherMap预报数据生成DataFrame

实现方案

完整可运行代码

import requests
import pandas as pd

# 基础配置
API_URL = "https://api.openweathermap.org/data/2.5/onecall"
APP_ID = "be02e7c76c38ec4e28e37a166d60abb7"
# 坐标列表,可直接扩容到35个城市
coords = [
    ("48.6355232", "-1.5102571"),
    ("47.3215806", "5.0414701")
]
# 定义需要提取的字段:(列名, 字典取值路径),新增字段只需修改此处
field_rules = [
    ("date", ["daily", "dt"]),
    ("temperature", ["daily", "temp", "day"]),
    ("wind_speed", ["daily", "wind_speed"]),
    ("clouds", ["daily", "clouds"])
]

result_rows = []

for lat, lon in coords:
    # 请求接口
    resp = requests.get(API_URL, params={
        "lat": lat,
        "lon": lon,
        "exclude": "hourly,current,minutely",
        "appid": APP_ID
    })
    if resp.status_code != 200:
        print(f"坐标{lat},{lon}请求失败,状态码{resp.status_code}")
        continue
    data = resp.json()
    city_lat = data["lat"]
    city_lon = data["lon"]
    # 遍历7天预报数据
    for daily_item in data["daily"]:
        row = {
            "lat": city_lat,
            "lon": city_lon
        }
        # 按预设规则提取字段
        for col_name, path in field_rules:
            val = daily_item if path[0] == "daily" else data
            for key in path[1:]:
                val = val[key]
            # 时间戳转可读日期
            if col_name == "date":
                val = pd.to_datetime(val, unit="s").date()
            row[col_name] = val
        result_rows.append(row)

# 生成目标DataFrame
df = pd.DataFrame(result_rows)
print(df.head())

逻辑说明

  • 预先定义字段提取规则,不需要在循环中硬编码写死字典键的取值逻辑,后续要新增字段只要修改field_rules列表即可
  • 遍历坐标列表发起请求时,自动复用同一套字段提取逻辑,不需要重复写取值代码
  • 内置了请求失败的判断逻辑,避免某个城市接口报错导致整个程序中断
  • 自动将时间戳转为可读的日期格式,也可以根据需要调整输出格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 09:54:00