如何基于DataFrame中的位置与时间批量获取温度数据?
解决批量获取Meteostat温度的问题
首先,你直接用DataFrame列创建Point对象的写法行不通,因为Point类需要单个数值(不是整个Series)来初始化位置信息。Meteostat目前没有原生支持批量处理多位置多时间点的API,所以得逐行处理每条记录。
具体实现步骤:
- 转换时间格式:确保
start列是datetime类型,Meteostat的Hourly类需要这个类型的参数:
import pandas as pd from meteostat import Point, Hourly # 读取数据并转换时间列 geo_time = pd.read_csv(r'geo_time.csv') geo_time['start'] = pd.to_datetime(geo_time['start'])
- 定义单条记录温度获取函数:写一个函数,接收DataFrame单行数据,创建对应位置的
Point,获取指定时间的温度,同时处理无数据的情况:
def get_temp(row): # 创建位置对象 location = Point(row['latitude'], row['longitude'], row['altitude']) # 获取指定时刻的小时数据 hourly_data = Hourly(location, row['start'], row['start']).fetch() # 返回温度,无数据则返回空值 return hourly_data['temp'].iloc[0] if not hourly_data.empty else pd.NA
- 批量生成温度列:用
apply方法逐行调用函数,将结果添加到原DataFrame:
# 添加温度列 geo_time['temp'] = geo_time.apply(get_temp, axis=1)
注意事项:
- API调用限制:Meteostat免费API有调用频率限制,批量处理大量数据时,建议在
get_temp函数中加入time.sleep(1)这类延迟逻辑,避免被限流。 - 数据缺失处理:部分位置或时间可能没有可用气象数据,函数中已返回
pd.NA,你可以根据需求用填充、删除等方式进一步处理缺失值。
内容的提问来源于stack exchange,提问作者steffsen
相关产品推荐
相关产品推荐

