xarray.Dataset按时间范围筛选如何自动获取外边界最近时间点?
你可以通过先单独匹配上下边界再切片的方式实现需求,该方案适配任意时间粒度的数据集,无需手动调整时间计算逻辑:
实现步骤
- 首先用
sel的method参数分别匹配覆盖查询范围的最近时间边界:- 左边界用
method="pad",自动取小于等于查询起始时间的最近已有时间点 - 右边界用
method="backfill",自动取大于等于查询结束时间的最近已有时间点
- 左边界用
- 用匹配到的边界做切片筛选
代码示例
import datetime # 定义你需要查询的原始时间范围 query_start = datetime.datetime(2021, 4, 15, 1, 12) query_end = datetime.datetime(2021, 4, 15, 7, 24) # 自动匹配符合覆盖要求的边界 matched_start = ds.time.sel(time=query_start, method="pad").item() matched_end = ds.time.sel(time=query_end, method="backfill").item() # 可选:添加兜底逻辑,避免查询时间超出数据集本身的时间范围报错 matched_start = max(matched_start, ds.time.min().item()) matched_end = min(matched_end, ds.time.max().item()) # 执行筛选 filtered_ds = ds.sel(time=slice(matched_start, matched_end))
以上代码运行后得到的filtered_ds就是你需要的完全覆盖查询范围的数据集,对应示例中会自动取2021-04-15T01:00到2021-04-15T08:00的时间区间。
内容的提问来源于stack exchange,提问作者Grmn
相关产品推荐
相关产品推荐

