Eliminar valores nan de un array NumPy
-
Eliminar valores nan usando los métodos
logical_not()
eisnan()
en NumPy -
Eliminar valores de Nan usando el método
isfinite()
en NumPy -
Eliminar valores de Nan utilizando el método
math.isnan
-
Eliminar valores nan utilizando el método
pandas.isnull
Este artículo discutirá algunas funciones integradas de NumPy que puede utilizar para eliminar valores nan
.
Eliminar valores nan usando los métodos logical_not()
e isnan()
en NumPy
logical_not()
se utiliza para aplicar un NOT
lógico a los elementos de un array. isnan()
es una función booleana que comprueba si un elemento es nan
o no.
Usando la función isnan()
, podemos crear un array booleana que tenga False
para todos los valores que no sean nan
y True
para todos los valores nan
. A continuación, usando la función logical_not()
, podemos convertir True
a False
y viceversa.
Por último, utilizando la indexación booleana, podemos filtrar todos los valores no nan
del array NumPy original. Todos los índices con True
como valor se utilizarán para filtrar el array NumPy.
Para obtener más información sobre estas funciones en profundidad, consulte su documentación oficial y aquí, respectivamente.
Consulte el siguiente fragmento de código para conocer la solución.
import numpy as np
myArray = np.array([1, 2, 3, np.nan, np.nan, 4, 5, 6, np.nan, 7, 8, 9, np.nan])
output1 = myArray[np.logical_not(np.isnan(myArray))] # Line 1
output2 = myArray[~np.isnan(myArray)] # Line 2
print(myArray)
print(output1)
print(output2)
Producción :
[ 1. 2. 3. nan nan 4. 5. 6. nan 7. 8. 9. nan]
[1. 2. 3. 4. 5. 6. 7. 8. 9.]
[1. 2. 3. 4. 5. 6. 7. 8. 9.]
Line 2
es una versión simplificada de Line 1
.
Eliminar valores de Nan usando el método isfinite()
en NumPy
Como sugiere el nombre, la función isfinite()
es una función booleana que comprueba si un elemento es finito o no. También puede buscar valores finitos en un array y devuelve un array booleana para el mismo. el array booleana almacenará False
para todos los valores nan
y True
para todos los valores finitos.
Usaremos esta función para recuperar un array booleana para el array de destino. Usando la indexación booleana, filtraremos todos los valores finitos. Nuevamente, como se mencionó anteriormente, los índices con valores True
se utilizarán para filtrar el array.
Aquí está el código de ejemplo.
import numpy as np
myArray1 = np.array([1, 2, 3, np.nan, np.nan, 4, 5, 6, np.nan, 7, 8, 9, np.nan])
myArray2 = np.array([np.nan, np.nan, np.nan, np.nan, np.nan, np.nan])
myArray3 = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
output1 = myArray1[np.isfinite(myArray1)]
output2 = myArray2[np.isfinite(myArray2)]
output3 = myArray3[np.isfinite(myArray3)]
print(myArray1)
print(myArray2)
print(myArray3)
print(output1)
print(output2)
print(output3)
Producción :
[ 1. 2. 3. nan nan 4. 5. 6. nan 7. 8. 9. nan]
[nan nan nan nan nan nan]
[ 1 2 3 4 5 6 7 8 9 10]
[1. 2. 3. 4. 5. 6. 7. 8. 9.]
[]
[ 1 2 3 4 5 6 7 8 9 10]
Para obtener más información sobre esta función, consulte la documentación oficial
Eliminar valores de Nan utilizando el método math.isnan
Aparte de estas dos soluciones NumPy, hay dos formas más de eliminar los valores nan
. Estas dos formas involucran la función isnan()
de la biblioteca math
y la función isnull
de la biblioteca pandas
. Ambas funciones comprueban si un elemento es nan
o no y devuelven un resultado booleano.
Aquí está la solución usando el método isnan()
.
import numpy as np
import math
myArray1 = np.array([1, 2, 3, np.nan, np.nan, 4, 5, 6, np.nan, 7, 8, 9, np.nan])
myArray2 = np.array([np.nan, np.nan, np.nan, np.nan, np.nan, np.nan])
myArray3 = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
booleanArray1 = [not math.isnan(number) for number in myArray1]
booleanArray2 = [not math.isnan(number) for number in myArray2]
booleanArray3 = [not math.isnan(number) for number in myArray3]
print(myArray1)
print(myArray2)
print(myArray3)
print(myArray1[booleanArray1])
print(myArray2[booleanArray2])
print(myArray3[booleanArray3])
Producción :
[ 1. 2. 3. nan nan 4. 5. 6. nan 7. 8. 9. nan]
[nan nan nan nan nan nan]
[ 1 2 3 4 5 6 7 8 9 10]
[1. 2. 3. 4. 5. 6. 7. 8. 9.]
[]
[ 1 2 3 4 5 6 7 8 9 10]
Eliminar valores nan utilizando el método pandas.isnull
A continuación se muestra la solución utilizando el método isnull()
de pandas
.
import numpy as np
import pandas as pd
myArray1 = np.array([1, 2, 3, np.nan, np.nan, 4, 5, 6, np.nan, 7, 8, 9, np.nan])
myArray2 = np.array([np.nan, np.nan, np.nan, np.nan, np.nan, np.nan])
myArray3 = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
booleanArray1 = [not pd.isnull(number) for number in myArray1]
booleanArray2 = [not pd.isnull(number) for number in myArray2]
booleanArray3 = [not pd.isnull(number) for number in myArray3]
print(myArray1)
print(myArray2)
print(myArray3)
print(myArray1[booleanArray1])
print(myArray2[booleanArray2])
print(myArray3[booleanArray3])
print(myArray1[~pd.isnull(myArray1)]) # Line 1
print(myArray2[~pd.isnull(myArray2)]) # Line 2
print(myArray3[~pd.isnull(myArray3)]) # Line 3
Producción :
[ 1. 2. 3. nan nan 4. 5. 6. nan 7. 8. 9. nan]
[nan nan nan nan nan nan]
[ 1 2 3 4 5 6 7 8 9 10]
[1. 2. 3. 4. 5. 6. 7. 8. 9.]
[]
[ 1 2 3 4 5 6 7 8 9 10]
[1. 2. 3. 4. 5. 6. 7. 8. 9.]
[]
[ 1 2 3 4 5 6 7 8 9 10]