pandas — valeurs manquantes
Les valeurs manquantes (NaN, None, NaT) faussent comptages et moyennes si on les ignore : isna les repère, fillna les remplace, dropna les écarte. Décidez au cas par cas, colonne par colonne.
- NaN
- None
- NaT
- isna
- fillna
- dropna
- to_numeric
- manquant
Syntaxe
df.isna().sum() # nombre de manquants par colonnedf["col"].fillna(valeur) df.dropna(subset=["col"])pd.to_numeric(df["col"], errors="coerce")Exemple
import ioimport pandas as pdsource = io.StringIO("""eleve,note,classeAna,14,ABob,,BChloé,17,David,abs,B""")df = pd.read_csv(source)print(df["note"].dtype) # → object (« abs » a empêché la lecture en nombres)df["note"] = pd.to_numeric(df["note"], errors="coerce")print(df.isna().sum().to_dict()) # → {'eleve': 0, 'note': 2, 'classe': 1}print(df["note"].mean()) # → 15.5print(df["note"].fillna(0).mean()) # → 7.75df["classe"] = df["classe"].fillna("inconnue")print(len(df.dropna(subset=["note"]))) # → 2À retenir
- Par défaut, sum, mean et count ignorent les valeurs manquantes : la moyenne ci-dessus porte sur 2 notes, pas sur 4. Annoncez toujours combien de valeurs ont été exclues.
- Piège : remplacer un manquant par 0 change le sens de la donnée, car un élève absent devient une très mauvaise note. Préférez exclure, remplacer par une valeur explicite (médiane du groupe) ou garder une colonne indicatrice.
- Piège : NaN n'est égal à rien, pas même à lui-même. df[df["note"] == float("nan")] est donc toujours vide ; utilisez isna() et notna().
- None devient NaN dans une colonne numérique et NaT dans une colonne de dates ; dans une colonne de texte, il reste None avec pandas 2 et devient NaN avec le type str de pandas 3 ; isna() le détecte dans tous les cas.
- errors="coerce" dans to_numeric ou to_datetime transforme les valeurs invalides en manquants : elles deviennent visibles au lieu de bloquer le calcul.
Voir aussi
- pandas — DataFramepandas manipule des tableaux (DataFrame) dont chaque colonne est une Series, comme une table SQL en mémoire. Commencez toujours par charger les données, puis inspecter leur forme et leurs types.
- pandas — filtrer et sélectionnerUn masque booléen filtre les lignes d'un DataFrame, loc sélectionne par étiquette et iloc par position ; query offre une écriture proche du WHERE de SQL. C'est l'étape qui précède toute analyse.
- pandas — merge (jointures)merge relie deux DataFrame sur une colonne commune, comme un JOIN en SQL, et how choisit inner, left, right ou outer. On s'en sert pour enrichir des ventes avec les données clients ou produits.