Подтвердить что ты не робот

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

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

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

Есть ли эффективная реализация этого?

4b9b3361

Ответ 1

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]

Ответ 2

Это приведет к удалению всех строк, всех нулей или всех 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]

Ответ 3

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

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.]])

Ответ 4

Кроме того: если вы хотите отбросить строки, если строка имеет 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.]])