在 pandas 中我可以做类似的事情 -
pd.read_csv(path).loc[lambda df: df.col > 10, cols]
我想知道 Xarray 中是否有等效的东西?我试过了-
xr.open_dataset(path)["var"].sel(
time=lambda da: ~((da.time.dt.month == 2) & (da.time.dt.day == 29))
)
和
xr.open_dataset(path)["var"].loc[
lambda da: ~((da.time.dt.month == 2) & (da.time.dt.day == 29))
]
都不起作用。显然,我可以用两行来实现这一点,但是当我必须打开并处理类似的多个数据集时,在一行中读取代码会更清晰。
一种方法是使用布尔时间索引:
import pandas as pd
import xarray as xr
time = pd.date_range('2000-01-01', periods=365, freq='D')
x = xr.DataArray(range(365), dims='time', coords={'time': time})
x.sel(time=~((x.time.dt.month == 2) * (x.time.dt.day == 29)))
在具有
*
和 month==2
的布尔索引上使用 day==29
运算符,我可以生成一个新索引,其中只有重叠为 True
,然后使用 ~
运算符进行反转。
不需要匿名函数。