Python 将xarray.apply(np.nansum)与args一起使用

Python 将xarray.apply(np.nansum)与args一起使用,python,xarray,Python,Xarray,我一直在尝试将np.nansum应用于xr.Dataset(xarray),但不断出现错误。对于三维数据集,我尝试应用于axis=2。语法不太清楚,我可能误解了,但我试过: ds.apply(np.nansum,axis=2)` and `ds.apply(lambda x: np.nansum(x,axis=2)) 并得到相同的错误: 无法使用没有显式表达式的二维数据设置变量“var” 维度名称。而是传递(DIM、数据)的元组 我猜这意味着它不知道返回到新dataset对象的维度名称是什么?

我一直在尝试将
np.nansum
应用于xr.Dataset(xarray),但不断出现错误。对于三维数据集,我尝试应用于axis=2。语法不太清楚,我可能误解了,但我试过:

ds.apply(np.nansum,axis=2)` and `ds.apply(lambda x: np.nansum(x,axis=2))
并得到相同的错误:

无法使用没有显式表达式的二维数据设置变量“var” 维度名称。而是传递(DIM、数据)的元组

我猜这意味着它不知道返回到新dataset对象的维度名称是什么?有没有办法解决这个问题

有人知道xarray为什么以及何时实现
np.nansum()

谢谢

这里遇到的问题是
nansum
返回一个numpy
ndarray
,而不是
DataArray
,这是传递到
apply
的函数应该返回的


对于
nansum
,您应该只使用
xarray.Dataset.sum
,如果您的数据是浮动的,它会在默认情况下跳过NaNs。

Jeremy是正确的,内置的
sum()
方法在默认情况下已经跳过了NaN。但如果您想提供自定义聚合函数,可以使用
reduce
,例如
ds.reduce(np.nansum,axis=2)

xarray.Dataset.sum()
NaNs?你能用它传递轴2(或dim=dimname)吗?谢谢,
reduce
是个好方法。另外,知道自定义函数必须返回DataArray也很方便(有意义,但不一定明显)。在使用
ds.reduce
的情况下,实际上可以使用返回numpy数组的函数(正如@shoyer在这里所做的)。