屏蔽 xarray 中的数据并更改 True 和 False 响应的值

Jac*_*dge 2 python-3.x python-xarray data-masking

我有一个 xarray DataArray,其中包含多天的数据。我可以使用 .where 函数为一个条件屏蔽它,但我想让所有值超过某个值 1 并且所有值低于该值 0。理想情况下,我还想确保任何 np.数据集中的 nans 没有改变,但这不是必需的。

import numpy as np
import xarray as xr

dval = np.random.randint(5,size=[3,4,4])
x = [0,1,2,3]
y = [0,1,2,3]
time = ['2017-10-13','2017-10-12','2017-10-11']

a = xr.DataArray(dval,coords=[time,x,y],dims=['time','x','y'])
a = a.where(a>2,1,0) #ideally this would work as (condition,True val, False val)
Run Code Online (Sandbox Code Playgroud)

这会导致“如果 drop=True 则无法设置‘其他’”的 ValueError

对此的任何帮助将不胜感激。

小智 7

a = a.where(a>2, 1, 0)不会工作,因为该DataArray.where方法只支持设置other。基本上你是这样做的:a = a.where(a>2, other=1, drop=0)

相反,您应该使用 xarray 的 3 参数xr.where函数:

a= xr.where(a>2, 1, 0)
Run Code Online (Sandbox Code Playgroud)

  • 您还可以在相同的调用中使用 `xr.where` 并返回 a 而不是 a.values (2认同)