【问题标题】:Xarray for-loop to collect/average data from single monthXarray for-loop 从单月收集/平均数据
【发布时间】:2021-09-02 16:51:46
【问题描述】:

所以我有一个 xarray 数据集,其描述如下。基本上,它包含陆海掩膜、水深测量数据和海面温度 (SST) 数据,所有这些数据都经过 40 年的特定纬度 x 经度过滤。我正在尝试每月访问 SST 数据(平均)。最终我也想做季节性(3个月)。

我正在考虑一个带有 if 语句并附加到数组的 for 循环 - 即,如果“sst”变量中的“时间”值包含“-04-”,它将表示四月(或我之后的任何一个月)。我仍在学习 xarray,所以如果有人有任何想法,我将不胜感激。

<xarray.Dataset>
Dimensions:  (TIME: 1, lat: 28, lon: 68, time: 14522)
Coordinates:
  * time     (time) datetime64[ns] 1981-09-01 1981-09-02 ... 2021-06-04
  * lon      (lon) float32 262.1 262.4 262.6 262.9 ... 278.1 278.4 278.6 278.9
  * lat      (lat) float32 24.12 24.38 24.62 24.88 ... 30.12 30.38 30.62 30.88
  * TIME     (TIME) object -001-01-01 00:00:00
Data variables:
    lsmask   (time, lat, lon, TIME) float32 nan 1.0 1.0 nan ... nan nan nan nan
    B_BATHY  (TIME, lat, lon, time) float32 nan nan nan nan ... nan nan nan nan
    sst      (time, lat, lon, TIME) float32 nan 28.23 28.16 nan ... nan nan nan
(attributes excluded because they are not necessary)

TLDR;我试图在这个 40 年的数据集中(平均)访问每年某些月份的数据。我认为 for 循环或函数可能有用,但我仍在学习 xarray 的细微差别。

【问题讨论】:

    标签: python numpy python-xarray


    【解决方案1】:

    您可以将time 维度的datetime accessornumpy.isin 一起使用来选择特定月份。

    这是一个例子:

    import xarray as xr
    import numpy as np
    
    x = xr.tutorial.open_dataset("air_temperature")
    
    # months we want to select
    target_months = [1, 2, 3, 4]
    
    x_sel = x.sel(time=np.isin(x.time.dt.month, target_months))
    

    在选择后检查唯一的月份给出了预期的结果:

    print(np.unique(x_sel.time.dt.month))
    
    #array([1, 2, 3, 4])
    

    【讨论】:

      猜你喜欢
      • 2020-01-22
      • 1970-01-01
      • 1970-01-01
      • 2020-07-02
      • 1970-01-01
      • 2019-05-27
      • 2018-02-22
      • 2021-03-28
      • 2021-09-27
      相关资源
      最近更新 更多