Python Dataarray 条件 .where() 保留 nan 值但将负值变为 0

Python Dataarray conditional .where() keep nan Values but turn negative values to 0

这个问题我已经好几个小时了,我似乎无法解决它。 我有一个包含 nan 值 (numpy.float32)、正值和负值 (numpy.float32) 的 xarray 数据数组。 现在我想把负值变成 0 - 只有这个。但即使是这样一个看似简单的任务,我也无法解决。例如,这是我一直在使用的。 (xarray.core.dataarray.DataArray)类型。

前面的代码是:

path = r'D:\....'
dObj = xr.open_dataset(path)
JJA = dObj ['cba'].sel(time=dObj.time.values)

对象看起来像这样:(非常抱歉我无法提供 .nc 文件,因为它有 200mb,我不知道如何相应地分割它)

JJA

我的解决方案是:

JJA = JJA.where(JJA>0,0)

但不知道为什么,这会将负值 AND nan 值变成 0。然后我尝试了不同的方法并使条件变得更复杂。

JJA = JJA.where((np.isnan(JJA)==False)&(JJA > 0),0)

不过没什么,还是变成了:

JJA

xarray docs 中所述,一行 JJA = JJA.where(JJA>0,0) 将 return 一个保留值满足 cond(即 JJA>0)的 DataArray,并将 return 0 用于 其他。所以这就是为什么它将不满足该条件的所有内容(包括 NaN、零和负值)更改为 0。

您的更复杂的掩码不起作用的原因是您使用的是 AND 而不是 OR。如果您只想将负值设置为零并单独保留 NaN,您可以执行以下操作: JJA = JJA.where((JJA > 0) | JJA.isnull(), 0)