Numpy:删除所有nan或0值的行

Bla*_*ack 16 python numpy pandas

如果rows = nan或,我想从表中删除所有值0.

我知道有一种方法可以使用pandas来做到这一点,pandas.dropna(how = 'all')但我想要一个numpy方法来删除所有nan或的行0.

这是否有效实施?

HYR*_*YRY 20

import numpy as np

a = np.array([
    [1, 0, 0],
    [0, np.nan, 0],
    [0, 0, 0],
    [np.nan, np.nan, np.nan],
    [2, 3, 4]
])

mask = np.all(np.isnan(a) | np.equal(a, 0), axis=1)
a[~mask]
Run Code Online (Sandbox Code Playgroud)

  • 因为我不熟悉numpy,我认为`[[foo]`是一个就地删除操作符.Jaime的帖子明确表示这会创建一个需要重新分配的新阵列. (4认同)

Jai*_*ime 6

这将删除所有全部为零的行或所有nans:

mask = np.all(np.isnan(arr), axis=1) | np.all(arr == 0, axis=1)
arr = arr[~mask]
Run Code Online (Sandbox Code Playgroud)

这将删除所有为零或nans的行:

mask = np.all(np.isnan(arr) | arr == 0, axis=1)
arr = arr[~mask]
Run Code Online (Sandbox Code Playgroud)