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