如何在Xarray中实现类似Pandas的匿名数据选择?
Xarray中实现匿名数据选择的等效写法
你之前的写法出错是因为对.sel()的lambda参数理解有误:.sel(time=lambda x: ...)里的x是time维度的坐标数组,而非整个变量的DataArray,所以不需要写x.time,直接用x调用dt属性即可。
下面是两种可行的一行写法,和Pandas的匿名选择逻辑等效:
方法1:用.sel()针对坐标维度筛选
xr.open_dataset(path)["var"].sel(time=lambda t: ~((t.dt.month == 2) & (t.dt.day == 29)))
方法2:用.loc()基于整个数组的条件筛选
如果你的Xarray版本在v0.18及以上,.loc()支持传入lambda参数(参数为当前的DataArray),直接写条件即可:
xr.open_dataset(path)["var"].loc[lambda da: ~((da.time.dt.month == 2) & (da.time.dt.day == 29))]
如果需要批量处理多个数据集,可以把筛选逻辑封装成复用函数,进一步简化代码:
filter_leap_day = lambda da: da.sel(time=lambda t: ~((t.dt.month == 2) & (t.dt.day == 29))) # 批量应用 ds1_var = filter_leap_day(xr.open_dataset(path1)["var"]) ds2_var = filter_leap_day(xr.open_dataset(path2)["var"])
内容的提问来源于stack exchange,提问作者thefrollickingnerd
相关产品推荐
相关产品推荐

