HOWTO · Python

Supprimer NaN de la liste en Python

Ce didacticiel montre comment supprimer NaN de la liste en Python.

Sur cette page

NaN est une valeur spéciale à virgule flottante, couramment utilisée pour représenter un résultat numérique indéfini ou impossible à représenter. Elle diffère de la chaîne ordinaire 'nan'. Pour une liste numérique, utilisez math.isnan() de Python ; pour des tableaux numériques, numpy.isnan() de NumPy est pratique. Pour supprimer la chaîne littérale 'nan', comparez directement les valeurs textuelles. Si une liste mixte contient à la fois des valeurs numériques NaN et la chaîne 'nan', combinez pandas.isnull() avec une comparaison de chaînes.

Supprimer NaN d’une liste Python avec math.isnan()

La fonction math.isnan() de la bibliothèque standard de Python détecte les valeurs numériques NaN. C’est une fonction, pas une méthode. NaN n’est pas égal à lui-même : un test comme x != x peut donc le détecter, mais math.isnan() exprime plus clairement l’intention. Utilisez cette approche si la liste contient des valeurs numériques acceptées par math.isnan() ; ce n’est pas un test général pour des chaînes ou des objets quelconques. La référence math.isnan() n’existe pas en français dans l’inventaire fourni ; le lien vers la référence anglaise est conservé : consultez la référence de math.isnan().

Cet exemple complet filtre une liste numérique sans modifier la liste d’origine :

import math

values = [1, 2, float("nan"), 4]
without_nan = [value for value in values if not math.isnan(value)]
print(without_nan)
[1, 2, 4]

Supprimer NaN d’une liste Python avec numpy.isnan()

Si NumPy fait déjà partie de votre projet, numpy.isnan() applique un test numérique à une liste ou à un tableau. Si nécessaire, installez NumPy avec python -m pip install numpy. L’exemple convertit l’entrée en tableau, crée un masque booléen, sélectionne les valeurs qui ne sont pas NaN, puis reconvertit le résultat en liste Python. Le résultat final est donc une liste, et non un tableau NumPy.

import numpy as np

values = [1, 2, np.nan, 4]
array = np.array(values)
without_nan = array[~np.isnan(array)].tolist()
print(without_nan)
[1.0, 2.0, 4.0]

Supprimer la chaîne ’nan’ d’une liste Python

La chaîne sentinelle est du texte ordinaire, et non une valeur NaN à virgule flottante. Si vos données sont déjà dans une liste de chaînes, supprimez la valeur exacte 'nan' en comparant directement chaque élément. Cette méthode conserve le type et l’orthographe de tous les éléments retenus. Adaptez la comparaison si vos données utilisent d’autres majuscules ou des conventions d’espacement différentes.

values = ["1", "2", "nan", "8"]
without_string_nan = [value for value in values if value != "nan"]
print(without_string_nan)
['1', '2', '8']

Si vous convertissez d’abord chaque élément avec str(), les nombres conservés deviennent eux aussi des chaînes. Cela peut être utile pour normaliser les données, mais change les types du résultat ; cette conversion n’est pas nécessaire pour supprimer une chaîne déjà présente dans la liste.

Supprimer NaN et la chaîne ’nan’ d’une liste Python mixte avec pandas.isnull()

Pour une liste mixte, utilisez pandas.isnull() pour repérer les valeurs manquantes, telles que les valeurs numériques NaN, puis vérifiez séparément si chaque valeur est égale à la chaîne littérale 'nan'. pandas.isnull() ne considère pas le texte 'nan' comme une valeur manquante. L’exemple suivant nécessite pandas (python -m pip install pandas) et conserve leurs types d’origine aux autres chaînes et nombres. La référence de pandas.isnull() décrit la détection des valeurs manquantes.

import pandas as pd

values = ["Ada", 23, "nan", "London", float("nan")]
without_missing_or_string_nan = [
    value
    for value in values
    if not pd.isnull(value) and value != "nan"
]
print(without_missing_or_string_nan)
['Ada', 23, 'London']