Xarray dataarray idxmin() 与 where() 方法返回所有“NaT”数组

问题描述 投票:0回答:2

我有一个 xarray 数据数组,其中包含从 0 到 34 的值。该数组有 3 个维度,时间(30 年的每日数据),然后是位置的纬度和经度。应该注意的是,对于某些经纬度位置,在整个时间维度上所有值均为零。

我想找出第一次非负出现的日期,我想 idxmin() 或 argmin() 方法应该可以解决这个问题。但是如果我沿着时间维度应用这些,我会得到从 idxmin() 方法返回的所有“NaT”,并且 argmin() 方法遇到全 nan 切片。

我怀疑这是因为位置没有非零值。如何通过忽略全零的位置来避免返回所有“NaT”?

我已经尝试过了,

da.idxmin(dim='time') # this works but it takes the zero values into account

da.where(da>0).idxmin(dim='time') # it returns all 'NaT' array since da.where(da>0) returns a array where some locations are all nan values
python python-xarray
2个回答
0
投票

您可以使用以下方法来做到这一点:

da_min_index = da.where(da > 0).argmin(dim='time')
if np.isnan(da_min_index).all():
    da_min_index = xr.DataArray(np.nan, dims='time')

0
投票

可能你需要使用skipna选项:

da.where(da>0).idxmin(dim='time', skipna=True)
© www.soinside.com 2019 - 2024. All rights reserved.