xarray-从另一个DataArray的时间标签中选择/索引DataArray

时间:2019-09-04 03:31:23

标签: python pandas numpy python-xarray

我有两个DataArray对象,分别是“ A”和“ B”。

除了LatitudeLongitude之外,它们两个都有time维度,表示每日数据。 A的时间坐标比B小。

A的时间维度:

<xarray.DataArray 'time' (time: 1422)>
array(['2015-03-30T00:00:00.000000000', '2015-06-14T00:00:00.000000000',
       '2015-06-16T00:00:00.000000000', ..., '2019-08-31T00:00:00.000000000',
       '2019-09-01T00:00:00.000000000', '2019-09-02T00:00:00.000000000'],
      dtype='datetime64[ns]')
Coordinates:
  * time     (time) datetime64[ns] 2015-03-30 2015-06-14 ... 2019-09-02

B的时间维度:

<xarray.DataArray 'time' (time: 16802)>
array(['1972-01-01T00:00:00.000000000', '1972-01-02T00:00:00.000000000',
       '1972-01-03T00:00:00.000000000', ..., '2017-12-29T00:00:00.000000000',
       '2017-12-30T00:00:00.000000000', '2017-12-31T00:00:00.000000000'],
      dtype='datetime64[ns]')
Coordinates:
  * time     (time) datetime64[ns] 1972-01-01 1972-01-02 ... 2017-12-31

很明显,A的time维是B的time维的子集。我想使用来自A的所有time标签从B选择数据。由于A中的时间不是连续的,所以我认为slice不适合。所以我尝试使用sel

B_sel = B.sel(time=A.time)

我收到一个错误:KeyError: "not all values found in index 'time'"

2 个答案:

答案 0 :(得分:0)

  

很明显,A的时间维度是B的时间维度的子集。

     

我收到一个错误:KeyError:“并非在索引'time'中找到所有值”

该错误消息本身就暗示了语句一中的假设是错误的。另外,如果您仔细查看时间值,A的值会一直到2019年,而B的值会在2017年结束。

因此,有两种解决方法:

  1. 如果您确定A到2017年都拥有B中的所有值,那么

    sel_dates = A.time.values[A.time.dt.year < 2017]
    B_sel = B.sel(time=sel_dates)
    
  2. 如果由于某个地方的某些意外值而不确定A中的值是连续的,则可以使用np.isin()进行元素逐个检查,numpy是速度优化的{ {1}}个功能

    sel_dates = A.time.values[np.isin(A.time.values, B.time.values)]
    
     ## example ##
     ## dates1 is an array of daily dates of 1 month
     dates1 = np.arange('2005-02', '2005-03', dtype='datetime64[D]')
     dates2 = np.array(['2005-02-03', '2002-02-05', '2000-01-05'], dtype='datetime64')
     # checking for dates2 which are a part of dates 1
     print(np.isin(dates2, dates1))
     >>array([ True, False, False])
    

答案 1 :(得分:0)

{% include image.html url="/images/trek1.jpg" description="This is a trek image" %}

http://xarray.pydata.org/en/stable/user-guide/indexing.html