Python如何在meteostat的Point函数中使用浮点经纬度列处理多位置查询
实现多点位气象数据批量查询的解决方案
现有代码核心问题修复
- 原代码直接对
data['Date']整个Series调用datetime.strptime会报错,要先用pd.to_datetime批量转换日期列格式 - 单点位查询逻辑要封装成可逐行调用的函数,再用
apply批量执行
完整可运行实现代码
import meteostat from datetime import datetime from meteostat import Point, Daily import matplotlib.pyplot as plt import pandas as pd import numpy as np import time # 1. 读取原始数据+批量转换日期格式 data = pd.read_csv(r'C:\Users\leoac\OneDrive\Desktop\Coding\Python apps\Correlation temp-goals in Serie A\seasons 09-19.csv', sep=";") # 批量转换日期列为datetime类型 data['event_date'] = pd.to_datetime(data['Date'], format='%d,%m,%Y') # 2. 封装单点位单日期气象查询函数 def get_single_point_temp(row): try: # 构造Point对象:传入当前行的lat、lon,自动适配float类型 point = Point(float(row['lat']), float(row['lon'])) # 起止日期都用当天,查询当日数据 daily_data = Daily(point, start=row['event_date'], end=row['event_date']).fetch() # 避免请求过快触发接口限制,按需调整休眠时间 time.sleep(0.05) # 返回当日平均气温,没有数据则返回NaN return daily_data.iloc[0]['tavg'] if not daily_data.empty else np.nan except Exception as e: # 异常情况返回NaN避免程序中断 return np.nan # 3. 批量逐行调用查询,将气温写入temp列 data['temp'] = data.apply(get_single_point_temp, axis=1) # 4. 验证结果+绘图 print(data[['Date', 'lat', 'lon', 'temp']]) data['temp'].dropna().plot() plt.show()
拓展:批量查询多类气象指标
如果需要获取平均温之外的其他气象数据(最高温tmax、最低温tmin、降水量prcp等),可以修改封装函数一次性返回多列结果:
def get_single_point_meteo(row): try: point = Point(float(row['lat']), float(row['lon'])) daily_data = Daily(point, start=row['event_date'], end=row['event_date']).fetch() time.sleep(0.05) if not daily_data.empty: d = daily_data.iloc[0] return pd.Series([d['tavg'], d['tmax'], d['tmin'], d['prcp']]) else: return pd.Series([np.nan, np.nan, np.nan, np.nan]) except: return pd.Series([np.nan, np.nan, np.nan, np.nan]) # 批量生成多列气象数据 data[['tavg', 'tmax', 'tmin', 'prcp']] = data.apply(get_single_point_meteo, axis=1)
内容的提问来源于stack exchange,提问作者Leonardo Acquaroli
相关产品推荐
相关产品推荐

