Ответ 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]
Я хотел бы удалить все значения из таблицы, если строки = nan
или 0
.
Я знаю, что есть способ сделать это с помощью pandas i.e pandas.dropna(how = 'all')
, но я бы хотел, чтобы метод numpy удалял строки со всеми nan
или 0
.
Есть ли эффективная реализация этого?
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.]])