如何从NumPy数组中删除NaN值?
[1, 2, NaN, 4, NaN, 8] ⟶ [1, 2, 4, 8]
如何从NumPy数组中删除NaN值?
[1, 2, NaN, 4, NaN, 8] ⟶ [1, 2, 4, 8]
当前回答
最简单的方法是:
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)]
点击这里查看更多细节。
最简单的方法是:
numpy.nan_to_num(x)
文档:https://docs.scipy.org/doc/numpy/reference/generated/numpy.nan_to_num.html
正如其他人所示
x[~numpy.isnan(x)]
的工作原理。但是如果numpy dtype不是原生数据类型(例如,如果它是object),它将抛出一个错误。在这种情况下,你可以用熊猫。
x[~pandas.isna(x)] or x[~pandas.isnull(x)]
如果它有帮助,对于简单的1d数组:
x = np.array([np.nan, 1, 2, 3, 4])
x[~np.isnan(x)]
>>> array([1., 2., 3., 4.])
但如果你希望扩展到矩阵并保留形状:
x = np.array([
[np.nan, np.nan],
[np.nan, 0],
[1, 2],
[3, 4]
])
x[~np.isnan(x).any(axis=1)]
>>> array([[1., 2.],
[3., 4.]])
我在处理pandas .shift()功能时遇到了这个问题,我想避免使用.apply(…,轴=1)由于其效率低下,不惜一切代价。
filter(lambda v: v==v, x)
既适用于列表和numpy数组 因为v !=v仅用于NaN