如何从NumPy数组中删除NaN值?

[1, 2, NaN, 4, NaN, 8]   ⟶   [1, 2, 4, 8]

当前回答

如果你使用numpy

# first get the indices where the values are finite
ii = np.isfinite(x)

# second get the values
x = x[ii]

其他回答

试试这个:

import math
print [value for value in x if not math.isnan(value)]

要了解更多,请阅读列表推导式。

filter(lambda v: v==v, x)

既适用于列表和numpy数组 因为v !=v仅用于NaN

正如其他人所示

x[~numpy.isnan(x)]

的工作原理。但是如果numpy dtype不是原生数据类型(例如,如果它是object),它将抛出一个错误。在这种情况下,你可以用熊猫。

x[~pandas.isna(x)] or x[~pandas.isnull(x)]

最简单的方法是:

numpy.nan_to_num(x)

文档:https://docs.scipy.org/doc/numpy/reference/generated/numpy.nan_to_num.html

@jmetz的答案可能是大多数人需要的;然而,它会产生一个一维数组,例如,使其无法用于删除矩阵中的整行或整列。

为此,应该将逻辑数组缩减为一维,然后对目标数组进行索引。例如,下面将删除至少有一个NaN值的行:

x = x[~numpy.isnan(x).any(axis=1)]

点击这里查看更多细节。