Supprimer les valeurs nan d'un tableau NumPy
-
Supprimer les valeurs Nan en utilisant les méthodes
logical_not()
etisnan()
dans NumPy -
Supprimer les valeurs
nan
en utilisant la méthodeisfinite()
dans NumPy -
Supprimer les valeurs
nan
en utilisant la méthodemath.isnan
-
Supprimer les valeurs
nan
en utilisant la méthodepandas.isnull
Cet article traite de certaines fonctions NumPy intégrées que vous pouvez utiliser pour supprimer des valeurs nan
.
Supprimer les valeurs Nan en utilisant les méthodes logical_not()
et isnan()
dans NumPy
logical_not()
est utilisé pour appliquer NOT
logique aux éléments d’un tableau. isnan()
est une fonction booléenne qui vérifie si un élément est nan
ou non.
En utilisant la fonction isnan()
, nous pouvons créer un tableau booléen qui a False
pour toutes les valeurs non nan
et True
pour toutes les valeurs nan
. Ensuite, en utilisant la fonction logical_not()
, nous pouvons convertir True
en False
et vice versa.
Enfin, en utilisant l’indexation booléenne, nous pouvons filtrer toutes les valeurs non nan
du tableau NumPy d’origine. Tous les index avec True
comme valeur seront utilisés pour filtrer le tableau NumPy.
Pour en savoir plus sur ces fonctions, reportez-vous respectivement à leur documentation officielle et ici.
Reportez-vous à l’extrait de code suivant pour la solution.
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)
Production:
[ 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
est une version simplifiée de Line 1
.
Supprimer les valeurs nan
en utilisant la méthode isfinite()
dans NumPy
Comme son nom l’indique, la fonction isfinite()
est une fonction booléenne qui vérifie si un élément est fini ou non. Il peut également vérifier les valeurs finies dans un tableau et renvoie un tableau booléen pour le même. Le tableau booléen stockera False
pour toutes les valeurs nan
et True
pour toutes les valeurs finies.
Nous utiliserons cette fonction pour récupérer un tableau booléen pour le tableau cible. En utilisant l’indexation booléenne, nous filtrerons toutes les valeurs finies. Encore une fois, comme mentionné ci-dessus, des index avec des valeurs True
seront utilisés pour filtrer le tableau.
Voici l’exemple de code.
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)
Production:
[ 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]
Pour en savoir plus sur cette fonction, reportez-vous à la documentation officielle
Supprimer les valeurs nan
en utilisant la méthode math.isnan
En dehors de ces deux solutions NumPy, il existe deux autres façons de supprimer les valeurs nan
. Ces deux méthodes impliquent la fonction isnan()
de la bibliothèque math
et la fonction isnull
de la bibliothèque pandas
. Ces deux fonctions vérifient si un élément est nan
ou non et renvoient un résultat booléen.
Voici la solution utilisant la méthode 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])
Production:
[ 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]
Supprimer les valeurs nan
en utilisant la méthode pandas.isnull
Voici la solution utilisant la méthode 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
Production:
[ 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]