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
nanen utilisant la méthodeisfinite()dans NumPy -
Supprimer les valeurs
nanen utilisant la méthodemath.isnan -
Supprimer les valeurs
nanen 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]
