Remover valores Nan de uma NumPy Array
-
Remova os valores Nan usando os métodos
logical_not()
eisnan()
em NumPy -
Remova os valores Nan usando o método
isfinite()
no NumPy -
Remova os valores Nan usando o método
math.isnan
-
Remova os valores Nan usando o método
pandas.isnull
Este artigo discutirá algumas funções NumPy embutidas que você pode usar para excluir valores nan
.
Remova os valores Nan usando os métodos logical_not()
e isnan()
em NumPy
logical_not()
é usado para aplicar NOT
lógico aos elementos de um array. isnan()
é uma função booleana que verifica se um elemento é nan
ou não.
Usando a função isnan()
, podemos criar um array booleano que tem False
para todos os valores não nan
e True
para todos os valores nan
. A seguir, usando a função logical_not()
, podemos converter True
em False
e vice-versa.
Por último, usando a indexação booleana, podemos filtrar todos os valores não nan
do array NumPy original. Todos os índices com True
como valor serão usados para filtrar o array NumPy.
Para aprender mais sobre essas funções em detalhes, consulte a documentação oficial e aqui, respectivamente.
Consulte o seguinte fragmento de código para a solução.
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)
Resultado:
[ 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
é uma versão simplificada da Line 1
.
Remova os valores Nan usando o método isfinite()
no NumPy
Como o nome sugere, a função isfinite()
é uma função booleana que verifica se um elemento é finito ou não. Ele também pode verificar se há valores finitos em um array e retorna um array booleana para o mesmo. O array booleano armazenará False
para todos os valores nan
e True
para todos os valores finitos.
Usaremos esta função para recuperar um array booleano para o array de destino. Usando a indexação booleana, filtraremos todos os valores finitos. Novamente, como mencionado acima, os índices com valores True
serão usados para filtrar o array.
Aqui está o código de exemplo.
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)
Resultado:
[ 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 saber mais sobre esta função, consulte a documentação oficial
Remova os valores Nan usando o método math.isnan
Além dessas duas soluções NumPy, existem mais duas maneiras de remover valores nan
. Estas duas formas envolvem a função isnan()
da biblioteca math
e a função isnull
da biblioteca pandas
. Ambas as funções verificam se um elemento é nan
ou não e retornam um resultado booleano.
Aqui está a solução usando o 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])
Resultado:
[ 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]
Remova os valores Nan usando o método pandas.isnull
Abaixo está a solução usando o 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
Resultado:
[ 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]