xarray - 从 numpy 数组中选择带有任意标签的 DataArray 中的数据

问题描述

我有一个名为 da_ffdi 的 DataArray。它包含三个维度:timelatitudelongitude。时间维度有一组连续的小时标签,从 1972-01-20T00:00:00 到 2020-06-30T00:00:00。

xarray.DataArray
'FFDI'    time: 424680    latitude: 148    longitude: 244

Coordinates:

    latitude    (latitude)    float32           -39.2 -39.163948 ... -33.9
    longitude   (longitude)   float32           140.8 140.83786 ... 149.96214 150.0
    time        (time)        datetime64[ns]    1972-01-20 ... 2020-06-30T23:00:00
                              array(['1972-01-20T00:00:00.000000000','1972-01-20T01:00:00.000000000','1972-01-20T02:00:00.000000000',...,'2020-06-30T21:00:00.000000000','2020-06-30T22:00:00.000000000','2020-06-30T23:00:00.000000000'],dtype='datetime64[ns]')

我有一个名为 np_dates 的 numpy 数组。

array(['2013-03-27','2019-03-25','2013-04-27','2013-03-21','2020-05-30','2018-03-18','2019-11-21','2018-03-17','2013-04-28','2008-03-14','2014-02-09','2013-05-03','2013-05-04','2015-05-05','2014-07-31','2003-06-06','2018-02-14','2018-04-14','1972-04-23','2014-01-01','1975-02-08','2008-04-02','1979-02-15','1975-03-02','2001-02-21','2006-08-16','2001-03-16','2018-03-25','2009-02-07','2008-04-03','2016-05-01','1990-01-30','1998-03-22','1982-05-19','1986-03-20','1987-11-23','2019-12-20','1998-02-26','1985-03-04','2018-05-04'])

我想要实现的是能够从 da_ffdi 中选择所有数据,其中 time 中的 np_dates 标签

我跑了:

da_ffdi.sel(time=np_dates)

这引发了一个错误

KeyError: "not all values found in index 'time'"

如何解决这个问题?这可以通过运行 where 函数来实现吗?

解决方法

DataArray.isin;来自文档:

lookup = xr.DataArray([-1,-2,-3,-4,-5],dims=["x"])

da.where(lookup.isin([-2,-4]),drop=True)
Out[36]: 
<xarray.DataArray (x: 2)>
array([2.,4.])
Dimensions without coordinates: x