HOWTO · Pandas
Comment remplacer toutes les valeurs NaN par des zéros dans une colonne d'un pandas DataFrame
remplacer les valeurs NaN par des zéros dans DataFrame en utilisant les méthodes df.fillna(), df.replace() dans la bibliothèque pandas
Sur cette page
Pour remplacer les valeurs manquantes dans une colonne d’un DataFrame pandas, sélectionnez cette colonne, appelez fillna(0), puis réaffectez la Series renvoyée à la même colonne : df["A"] = df["A"].fillna(0). Seule la colonne A est modifiée ; les autres colonnes restent inchangées. La méthode df.fillna() peut aussi remplacer les valeurs manquantes dans tout un DataFrame. Il est donc important de sélectionner d’abord une Series lorsque l’opération doit se limiter à une colonne. La méthode df.replace() constitue une autre option pour remplacer une valeur précise dans la Series sélectionnée.
Remplacer les valeurs NaN d’une colonne avec fillna()
fillna() remplace les valeurs manquantes reconnues par pandas par la valeur que vous indiquez. Dans l’exemple, lorsque pandas crée le DataFrame, None dans une colonne numérique est représenté comme une valeur manquante. En réaffectant le résultat de fillna(0) à df["A"], le remplacement est appliqué à df ; sans cette affectation, la variable DataFrame resterait inchangée. La deuxième colonne sert de comparaison et conserve sa propre valeur manquante.
Exécutez cet exemple :
Le code et les libellés ou sorties affichés dans cette section restent en anglais.
import pandas as pd
df = pd.DataFrame({
"A": [1, 2, None, 4],
"B": [None, 2, 3, 4],
})
df["A"] = df["A"].fillna(0)
print(df.to_string())
A B
0 1.0 NaN
1 2.0 2.0
2 0.0 3.0
3 4.0 4.0
La sortie montre que la valeur manquante de la colonne A est devenue 0.0, tandis que celle de la colonne B reste NaN. Appliquez le même schéma d’affectation à votre DataFrame et à la colonne visée. fillna() accepte aussi d’autres valeurs de remplacement et prend en charge des stratégies comme le remplissage vers l’avant ou vers l’arrière ; choisissez-les uniquement si elles correspondent au sens et à l’ordre de vos données. Appliquer df.fillna(0) au DataFrame lui-même remplace les valeurs manquantes dans ses différentes colonnes, et pas uniquement dans A. Les noms de colonnes et les libellés visibles dans l’exemple restent en anglais.
Remplacer les valeurs NaN d’une colonne avec replace()
replace() est une autre option pour remplacer une valeur particulière ou un ensemble de valeurs. Pour cibler une valeur manquante dans une Series, utilisez df["A"].replace(float("nan"), 0) et réaffectez la Series renvoyée à df["A"]. Cette méthode indique explicitement une valeur NaN ; ne supposez pas que None est toujours traité comme NaN par replace(). Comme avec fillna(), appliquer la méthode à la Series sélectionnée limite l’opération à cette colonne. Appeler df.replace(...) sur le DataFrame entier peut affecter les valeurs correspondantes dans plusieurs colonnes.
Pour cette tâche, fillna() exprime directement l’intention. Utilisez replace() lorsque son comportement de correspondance de valeurs est utile, par exemple si vous devez aussi normaliser une valeur de remplacement connue dans la colonne sélectionnée. Dans les deux exemples, réaffectez le résultat renvoyé si le code suivant doit utiliser les données modifiées ; inplace=True n’est pas nécessaire avec cette approche.
Choisir une valeur de remplacement adaptée aux données
Zéro ne convient que s’il représente le sens d’une observation manquante dans votre analyse. Par exemple, il peut être pertinent lorsqu’un décompte absent signifie qu’aucun événement ne s’est produit, mais il peut fausser des mesures lorsque l’absence signifie « inconnu ». Selon la colonne et l’analyse, une autre constante, une valeur propre au domaine ou une statistique comme la moyenne ou la médiane peut être plus appropriée. Déterminez comment interpréter les données manquantes avant de les remplacer : cette opération efface la distinction entre une observation absente et une véritable valeur zéro.
La valeur de remplacement doit aussi être compatible avec les données de la colonne. Un zéro numérique convient à une colonne numérique, tandis que remplir une colonne textuelle avec zéro peut modifier la façon dont pandas représente ou traite ces données. Vérifiez le type de données résultant si des calculs ultérieurs nécessitent un type numérique. Les exemples ici ne remplissent que la colonne sélectionnée, ce qui aide à éviter de modifier des données sans rapport avec votre choix.
Vérifier le résultat
Inspectez la colonne visée avec df["A"] ou affichez le DataFrame pour confirmer que les valeurs attendues ont changé. Pour compter les valeurs manquantes restantes dans cette colonne, utilisez df["A"].isna().sum() ; un résultat égal à zéro signifie qu’il ne reste aucune valeur manquante reconnue par pandas dans cette Series. Cette vérification ne permet pas de savoir si zéro était le bon choix pour l’analyse : vérifiez aussi que le remplacement correspond au sens de vos données. Si le compte n’est pas nul, vérifiez que vous avez sélectionné la bonne colonne et réaffecté la Series renvoyée par la méthode.