Supprimer les valeurs nan d'un tableau NumPy

Vaibhav Vaibhav 30 janvier 2023
  1. Supprimer les valeurs Nan en utilisant les méthodes logical_not() et isnan() dans NumPy
  2. Supprimer les valeurs nan en utilisant la méthode isfinite() dans NumPy
  3. Supprimer les valeurs nan en utilisant la méthode math.isnan
  4. Supprimer les valeurs nan en utilisant la méthode pandas.isnull
Supprimer les valeurs nan d'un tableau NumPy

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]
Vaibhav Vaibhav avatar Vaibhav Vaibhav avatar

Vaibhav is an artificial intelligence and cloud computing stan. He likes to build end-to-end full-stack web and mobile applications. Besides computer science and technology, he loves playing cricket and badminton, going on bike rides, and doodling.