Meteostat API未传start/end参数获取站点可用日期范围报错求助
问题说明
使用Meteostat库开展气象数据查询时,需要获取指定气象站支持的全部可用数据日期范围,但调用Daily类时如果不传入start、end日期参数就会触发报错,相关实现代码如下:
# Import Meteostat library and dependencies from datetime import datetime import matplotlib.pyplot as plt from meteostat import Point, Daily, Stations # Set coordinates of MS lat = -20.316524 lon = -53.680500 # Set time period start = datetime(2021, 1, 1) end = datetime(2022, 6, 1) # Closest station stations = Stations() stations = stations.nearby(lat, lon) stations = stations.inventory('daily', True) station = stations.fetch(1) station # Get daily data for 2018 at the selected weather station #data = Daily(station) <------- THIS LINE GIVES ME AN ERROR data = Daily(station , start, end) data = data.fetch()
报错原因
Daily类在设计时就强制要求传入时间范围参数,不支持无参直接调用拉取全量数据。这个限制是为了避免无参调用时拉取到气象站几十年跨度的冗余数据,造成不必要的流量浪费、内存占用或者请求超时。
解决方法
不需要通过无参调用Daily的方式获取站点可用数据范围,你之前调用stations.inventory('daily', True)筛选出有有效日数据的站点后,返回的站点元数据本身就已经携带了日尺度数据的可用时间信息:
daily_start字段对应该站点日尺度观测数据的最早可用日期daily_end字段对应该站点日尺度观测数据的最晚可用日期
直接读取这两个字段就能拿到完整可用时间范围,再传入Daily类即可拉取该站点所有可用的日数据,修正后的代码如下:
# Import Meteostat library and dependencies from datetime import datetime import matplotlib.pyplot as plt from meteostat import Point, Daily, Stations # Set coordinates of MS lat = -20.316524 lon = -53.680500 # Get closest station with valid daily data stations = Stations() stations = stations.nearby(lat, lon) stations = stations.inventory('daily', True) station = stations.fetch(1) # Extract available daily data time range from station metadata data_start = station['daily_start'].iloc[0] data_end = station['daily_end'].iloc[0] # Fetch all available daily data of the station data = Daily(station, data_start, data_end) data = data.fetch()
如果不想读取元数据字段,也可以直接给Daily传入一个跨度足够大的时间范围(比如起始时间设为1900年1月1日,结束时间设为当前日期),接口会自动返回该时间窗口内实际存在的观测数据,不会因为传入的时间范围超出站点实际数据周期触发报错。
内容的提问来源于stack exchange,提问作者Lucas
相关产品推荐
相关产品推荐

