Numpy: caer filas con todos los valores nan o 0

Me gustaría eliminar todos los valores de una tabla si las filas = nan o 0 .

Sé que hay una forma de hacerlo utilizando pandas, es decir, pandas.dropna(how = 'all') pero me gustaría un método numpy para eliminar filas con todos los nan o 0 .

¿Hay una implementación eficiente de esto?

 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] 

Esto eliminará todas las filas que son todos ceros, o todos nans:

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

Y esto eliminará todas las filas que son todas ceros o nans:

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

Me gusta este enfoque

 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) 

Afuera:

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

Además: si desea eliminar filas si una fila tiene un nan o 0 en un solo valor

 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] 

Salida

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