如何在单个xarray dataset中选择多个不连续的时间区间
xarray多时间区间筛选实现方法
xarray的sel方法本身不直接支持传入多个slice同时筛选,但有两种成熟的实现方案可以满足你的需求:
方案1:时间属性条件筛选(适合固定规律的时段)
你的需求是每4小时提取一次20分钟的片段,属于有固定规律的时段,直接通过时间坐标的属性构造过滤条件即可,代码最简洁:
# 确保time坐标为datetime64格式(常规读取的nc/h5等数据默认都是该格式) # 提取时间的小时、分钟属性 hour = file_dataset.time.dt.hour minute = file_dataset.time.dt.minute # 构造筛选条件:从5点开始每4小时一次,且分钟数小于20 cond = ((hour - 5) % 4 == 0) & (minute < 20) # 过滤掉不符合条件的时间点 result = file_dataset.where(cond, drop=True)
方案2:多区间循环筛选拼接(适合任意自定义时段)
如果你的时段规则有变化,需要灵活指定多个时间区间,可以先生成所有需要的时间切片,循环筛选后再沿时间轴拼接:
import pandas as pd import xarray as xr # 生成所有时段的起始时间,按你的需求设置起止时间和间隔频率 start_times = pd.date_range( start='2021-05-09 05:00:00', end='2021-05-17 12:00:00', freq='4H' ) # 每个时段结束时间为起始时间+20分钟 time_slices = [slice(st, st + pd.Timedelta(minutes=20)) for st in start_times] # 循环筛选每个区间的数据集,沿时间轴拼接 selected_ds = xr.concat( [file_dataset.sel(time=ts) for ts in time_slices], dim='time' )
注意事项
- 如果部分区间存在数据缺失,可以在
xr.concat中添加compat='override'参数避免维度对齐报错 - 若数据时间精度高于秒级,可适当调整slice的时间范围边界,避免漏选采样点
内容的提问来源于stack exchange,提问作者binverted
相关产品推荐
相关产品推荐

