Numpy: удаление строк со всеми значениями nan или 0



Я хотел бы удалить все значения из таблицы, если строки = nan или 0.



Я знаю, что есть способ сделать это с помощью pandas, то есть pandas.dropna(how = 'all'), но я хотел бы использовать метод numpy для удаления строк со всеми nan или 0.



Существует ли эффективная реализация этого?

538   4  

4 ответов:

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]

Это удалит все строки, которые являются всеми нулями или всеми nans:

mask = np.all(np.isnan(arr), axis=1) | np.all(arr == 0, axis=1)
arr = arr[~mask]

И это удалит все строки, которые являются либо нулями, либо nans:

mask = np.all(np.isnan(arr) | arr == 0, axis=1)
arr = arr[~mask]

Мне нравится такой подход

import numpy as np

arr = np.array([[ np.nan,  np.nan],
                [ -1.,  np.nan],
                [ np.nan,  -2.],
                [ np.nan,  np.nan],
                [ np.nan,   0.]])
mask = (np.nan_to_num(arr) != 0).any(axis=1)

Выход:

>>> arr[mask]
... array([[ -1.,  nan],
          [ nan,  -2.]])

Кроме того: если вы хотите удалить строки, если строка имеет nan или 0 в любом отдельном значении

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

mask = np.any(np.isnan(a) | np.equal(a, 0), axis=1)
a[~mask]

Вывод

array([[ 2.,  3.,  4.]])

Comments

    Ничего не найдено.