Python Dataarray conditional.where()保留nan值,但将负值改为0

Python Dataarray conditional.where()保留nan值,但将负值改为0,python,where-clause,python-xarray,Python,Where Clause,Python Xarray,这个问题我已经有好几个小时了,我似乎无法解决它。 我有一个包含nan值(numpy.float32)、正值和负值(numpy.float32)的xarray数据数组。 现在我想把负值改为0-仅此而已。但是,即使如此简单的任务对我来说也是不可能解决的。例如,这就是我一直从事的工作。(xarray.core.dataarray.dataarray)类型 上述代码为: path=r'D:\..' dObj=xr.open_数据集(路径) JJA=dObj['cba'].sel(time=dObj.ti

这个问题我已经有好几个小时了,我似乎无法解决它。 我有一个包含nan值(numpy.float32)、正值和负值(numpy.float32)的xarray数据数组。 现在我想把负值改为0-仅此而已。但是,即使如此简单的任务对我来说也是不可能解决的。例如,这就是我一直从事的工作。(xarray.core.dataarray.dataarray)类型

上述代码为:

path=r'D:\..'
dObj=xr.open_数据集(路径)
JJA=dObj['cba'].sel(time=dObj.time.values)
对象看起来是这样的:(非常抱歉,我不能提供.nc文件,因为它是200mb的,我不知道如何相应地分割它)

JJA

我的解决办法是:

JJA=JJA.where(JJA>0,0)
但不知怎的,这会将负值和nan值变成0,不知道为什么。然后我尝试了不同的方法,使条件变得更加复杂

JJA=JJA.where((np.isnan(JJA)==False)和(JJA>0),0)
但没什么,它仍然会变成:

JJA

如中所述,类似
JJA=JJA。其中(JJA>0,0)
将返回一个数据数组,其中保留的值满足
cond
(即
JJA>0
)的要求,并将返回
0
。这就是为什么它将所有不满足该条件的内容(包括NaN、零和负值)都更改为0

你更复杂的面具不起作用的原因是你正在使用AND而不是OR。如果只想将负值设置为零,而不使用NaN,可以执行以下操作:
JJA=JJA.where((JJA>0)|JJA.isnull(),0)

谢谢,我明天早上会试试。但这对我来说真的很困惑,因为我无法理解它。通常我会说:如果val<0和val!=南:在这里做点什么似乎有点不同,即使你把它列出来了,我仍然无法理解它。在伪代码中:如果值小于0,例如负且不是nan值,则执行某些操作。也许我还不太了解这些数据类型是如何工作的。布尔逻辑可能会让人困惑,但网络搜索应该会为您提供一些学习更多信息的好资源。记住,如果val<0,则根据定义,它不是nan值,因此添加和val!=nan在评论中的示例中没有给您带来任何好处。