HOWTO · NumPy
Supprimer les valeurs NaN d'un tableau NumPy
Apprenez à supprimer les valeurs NaN d'un tableau NumPy en Python
Sur cette page
Pour supprimer les éléments NaN d’un tableau NumPy, créez un masque qui vaut vrai pour les éléments qui ne sont pas NaN, puis utilisez-le pour sélectionner ces éléments. Pour un tableau NumPy, array[~np.isnan(array)] est la forme la plus concise.
Supprimer les valeurs NaN avec les fonctions logical_not() et isnan() de NumPy
np.isnan(array) renvoie un tableau booléen qui contient True aux positions des éléments NaN. np.logical_not() inverse ces valeurs : le masque obtenu contient donc True pour les nombres ordinaires. L’indexation booléenne conserve les éléments correspondants dans leur ordre d’origine. L’opérateur ~ est l’équivalent plus court pour ce tableau booléen NumPy.
Cet exemple applique les deux formes et montre aussi le résultat lorsque l’entrée ne contient que des NaN ou n’en contient aucun :
import numpy as np
values = np.array([1.0, np.nan, 3.0])
without_nan = values[np.logical_not(np.isnan(values))]
without_nan_short = values[~np.isnan(values)]
all_nan = np.array([np.nan, np.nan])
no_nan = np.array([1, 2, 3])
print(without_nan)
print(without_nan_short)
print(all_nan[~np.isnan(all_nan)])
print(no_nan[~np.isnan(no_nan)])
[1. 3.]
[1. 3.]
[]
[1 2 3]
Les deux masques sélectionnent les mêmes valeurs. Une entrée composée uniquement de NaN produit un tableau vide, tandis qu’une entrée sans NaN reste inchangée. Consultez la documentation officielle de np.logical_not() et celle de np.isnan().
Supprimer les valeurs NaN avec la fonction isfinite() de NumPy
np.isfinite(array) crée un masque qui vaut vrai pour les nombres finis. L’indexation avec ce masque élimine les NaN, mais aussi les infinis positifs et négatifs. Utilisez cette fonction si vous souhaitez ne conserver que les valeurs finies ; pour filtrer uniquement les NaN tout en gardant les infinis, utilisez le masque inversé np.isnan() présenté plus haut. Consultez la documentation officielle de np.isfinite() pour connaître son comportement avec les types numériques.
Supprimer les valeurs NaN avec math.isnan()
La fonction math.isnan() de la bibliothèque standard Python vérifie une valeur scalaire à la fois. Commencez par l’importer avec import math. Pour un tableau numérique à une dimension, une compréhension de liste permet de créer un masque booléen : keep = [not math.isnan(value) for value in values], puis filtered = values[keep]. Cette approche parcourt chaque élément du tableau en Python, tandis que les fonctions NumPy opèrent sur le tableau. Elle est prévue pour une entrée à une dimension : l’itération sur un tableau multidimensionnel fournit des sous-tableaux plutôt que des nombres scalaires.
Supprimer les valeurs NaN avec pandas.isnull()
Si pandas fait déjà partie de votre projet, importez-le avec import pandas as pd ; pd.isnull() repère les valeurs manquantes et permet de construire le masque inversé : filtered = values[~pd.isnull(values)]. Il s’agit d’une fonction pandas, et non d’une méthode NumPy ; il n’est donc pas nécessaire d’installer pandas uniquement pour cette tâche. La détection des valeurs manquantes couvre également les autres marqueurs de valeurs manquantes de pandas lorsqu’ils apparaissent dans des structures de données prises en charge. Consultez la référence existante de isnull() dans pandas.