607 votes

Comment remplacer les valeurs NaN par des zéros dans une colonne d'un cadre de données Pandas ?

J'ai un Dataframe Pandas comme ci-dessous :

      itm Date                  Amount 
67    420 2012-09-30 00:00:00   65211
68    421 2012-09-09 00:00:00   29424
69    421 2012-09-16 00:00:00   29877
70    421 2012-09-23 00:00:00   30990
71    421 2012-09-30 00:00:00   61303
72    485 2012-09-09 00:00:00   71781
73    485 2012-09-16 00:00:00     NaN
74    485 2012-09-23 00:00:00   11072
75    485 2012-09-30 00:00:00  113702
76    489 2012-09-09 00:00:00   64731
77    489 2012-09-16 00:00:00     NaN

Lorsque j'essaie d'appliquer une fonction à la colonne Montant, j'obtiens l'erreur suivante :

ValueError: cannot convert float NaN to integer

J'ai essayé d'appliquer une fonction en utilisant .isnan à partir du module mathématique. J'ai essayé l'attribut pandas .replace. J'ai essayé l'attribut .sparse data de pandas 0.9. J'ai également essayé l'instruction if NaN == NaN dans une fonction. J'ai également consulté cet article Comment remplacer les valeurs NA par des zéros dans un cadre de données R ? en regardant d'autres articles. Toutes les méthodes que j'ai essayées n'ont pas fonctionné ou ne reconnaissent pas NaN. Tout conseil ou solution serait apprécié.

2 votes

Le seul problème est que df.fill.na() ne fonctionne pas si le cadre de données sur lequel vous l'appliquez est rééchantillonné ou a été découpé par la fonction loc.

11voto

Vous pouvez également utiliser les dictionnaires pour remplir les valeurs NaN des colonnes spécifiques dans le DataFrame plutôt que de remplir tous les DF avec une seule valeur.

import pandas as pd

df = pd.read_excel('example.xlsx')
df.fillna( {
        'column1': 'Write your values here',
        'column2': 'Write your values here',
        'column3': 'Write your values here',
        'column4': 'Write your values here',
        .
        .
        .
        'column-n': 'Write your values here'} , inplace=True)

9voto

tulsi kumar Points 556

Un moyen facile de combler les valeurs manquantes :-

remplissage colonnes de chaînes : lorsque les colonnes de chaînes de caractères ont des valeurs manquantes et des valeurs NaN.

df['string column name'].fillna(df['string column name'].mode().values[0], inplace = True)

remplissage colonnes numériques : lorsque les colonnes numériques ont des valeurs manquantes et des valeurs NaN.

df['numeric column name'].fillna(df['numeric column name'].mean(), inplace = True)

remplir NaN avec zéro :

df['column name'].fillna(0, inplace = True)

6voto

Vivek Ananthan Points 982

Pour remplacer les valeurs na dans pandas

df['column_name'].fillna(value_to_be_replaced,inplace=True)

si inplace = False Au lieu de mettre à jour le df (dataframe), il retournera les valeurs modifiées.

5voto

Bharath_Raja Points 562

enter image description here

En considérant la colonne particulière Amount dans le tableau ci-dessus est de type entier. La solution suivante serait une solution :

df['Amount'] = df.Amount.fillna(0).astype(int)

De même, vous pouvez le remplir avec différents types de données, par exemple float , str et ainsi de suite.

En particulier, j'envisagerais le type de données pour comparer diverses valeurs d'une même colonne.

5voto

Jackson Points 11

Il y a déjà eu de nombreuses contributions, mais comme je suis nouveau ici, je vais quand même apporter ma contribution.

Il existe deux approches pour remplacer NaN valeurs avec des zéros dans le DataFrame Pandas :

  1. fillna() : la fonction remplit les valeurs NA/NaN en utilisant la méthode spécifiée.
  2. replace() : df.replace()une méthode simple utilisée pour remplacer une chaîne de caractères, une expression rationnelle, une liste ou un dictionnaire.

Exemple :

#NaN with zero on all columns
df2 = df.fillna(0)

#Using the inplace=True keyword in a pandas method changes the default behaviour.
    df.fillna(0, inplace = True)

# multiple columns appraoch
df[["Student", "ID"]] = df[["Student", "ID"]].fillna(0)

enfin la méthode replace() :

df["Student"] = df["Student"].replace(np.nan, 0)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X