如何获取numpy数组中所有NaN值的索引列表?

Posted

技术标签:

【中文标题】如何获取numpy数组中所有NaN值的索引列表?【英文标题】:How to get the indices list of all NaN value in numpy array? 【发布时间】:2016-10-11 19:37:23 【问题描述】:

现在说我有一个 numpy 数组,它被定义为,

[[1,2,3,4],
[2,3,NaN,5],
[NaN,5,2,3]]

现在我想要一个包含所有缺失值索引的列表,在这种情况下为[(1,2),(2,0)]

有什么办法可以做到吗?

【问题讨论】:

【参考方案1】:

np.isnan 结合np.argwhere

x = np.array([[1,2,3,4],
              [2,3,np.nan,5],
              [np.nan,5,2,3]])
np.argwhere(np.isnan(x))

输出:

array([[1, 2],
       [2, 0]])

【讨论】:

如何对具有浮点值的数组执行相同操作?【参考方案2】:

您可以使用np.where 来匹配与数组的Nan 值和map 对应的布尔条件,以生成tuples 的列表。

>>>list(map(tuple, np.where(np.isnan(x))))
[(1, 2), (2, 0)]

【讨论】:

我想你想要list( zip(* map( list, np.where(np.isnan(x) ) ) ) )【参考方案3】:

由于x!=x 返回与np.isnan(x) 相同的布尔数组(因为np.nan!=np.nan 将返回True),您也可以这样写:

np.argwhere(x!=x)

但是,我仍然建议编写 np.argwhere(np.isnan(x)),因为它更具可读性。我只是尝试提供另一种方法来编写此答案中的代码。

【讨论】:

以上是关于如何获取numpy数组中所有NaN值的索引列表?的主要内容,如果未能解决你的问题,请参考以下文章

有没有更好的方法让 numpy.argmin() 忽略 NaN 值

Python如何删除numpy数组中指定值的元素

在二维矩阵中使用 numpy.nanargmin()

用列表中的值填充 NaN

查找具有 NaN 值的 DataFrame 列表的索引 - Pandas

Numpy数组获取不是NaN的数组的子集/切片