En este artículo, veremos cómo contar la cantidad de elementos que no son NaN en una array NumPy en Python.
NAN: Se usa cuando no te importa cuál es el valor en esa posición. Tal vez a veces se usa en lugar de datos faltantes o datos corruptos.
Método 1: Condición de uso
En este ejemplo, utilizaremos arreglos unidimensionales. En el código dado a continuación, recorremos cada entrada de la array NumPy dada y verificamos si el valor es un NaN o no.
Python3
import numpy as np ex1 = np.array([1, 4, -9, np.nan]) ex2 = np.array([1, 45, -2, np.nan, 3, -np.nan, 3, np.nan]) def approach_1(data): # here the input data, is a numpy ndarray # initialize the number of non-NaN elements # in data count = 0 # loop over each entry of the data for entry in data: # check whether the entry is a non-NaN value # or not if not np.isnan(entry): # if not NaN, increment "count" by 1 count += 1 return count print(approach_1(ex1)) print(approach_1(ex2))
Producción:
3 5
Método 2: Usar isnan()
Usando la funcionalidad de las arrays NumPy, podemos realizar una operación en toda la array a la vez, en lugar de un solo elemento.
Función utilizada:
- np.isnan(datos): devuelve una array booleana después de realizar la operación np.isnan() en las entradas de la array, datos
- np.sum(): dado que estamos ingresando una array booleana en la función de suma, devuelve la cantidad de valores verdaderos (1) en la array booleana.
Python3
import numpy as np ex3 = np.array([[3, 4, -390, np.nan], [np.nan, np.nan, np.nan, -90]]) def approach_2(data): return np.sum(~np.isnan(data)) print(approach_2(ex3))
Producción:
4
Método 3: Usar la función np.count_nonzero()
La función numpy.count_nonzero() cuenta el número de valores distintos de cero en la array arr.
Sintaxis: numpy.count_nonzero(arr, axis=Ninguno)
Parámetros :
arr : [array_like] La array para la cual contar los distintos de ceros.
eje : [int o tupla, opcional] Eje o tupla de ejes a lo largo de los cuales se cuentan los valores distintos de cero. El valor predeterminado es Ninguno, lo que significa que los valores distintos de cero se contarán en una versión simplificada de arr.Devuelve: [int o array de int] Número de valores distintos de cero en la array a lo largo de un eje dado. De lo contrario, se devuelve el número total de valores distintos de cero en la array.
Python3
import numpy as np ex4 = np.array([[0.35834379, 0.67202438, np.nan, np.nan, np.nan, 0.47870971], [np.nan, np.nan, np.nan, 0.08113384, 0.70511741, 0.15260996], [0.09028477, np.nan, 0.16639899, 0.47740582, 0.7259116, 0.94797347], [0.80305651, np.nan, 0.67949724, 0.84112054, 0.15951702, 0.07510587], [0.28643337, 0.00804256, 0.36775056, 0.19360266, 0.07288145, 0.37076932]]) def approach_3(data): return data.size - np.count_nonzero(np.isnan(data)) print(approach_3(ex4))
Producción:
22