296 votes

pandas DataFrame : remplacer les valeurs nan par la moyenne des colonnes

J'ai un DataFrame pandas rempli principalement de nombres réels, mais il y a quelques nan dans ce domaine également.

Comment remplacer le nan avec les moyennes des colonnes où ils se trouvent ?

Cette question est très similaire à celle-ci : numpy array : remplacer les valeurs nan par la moyenne des colonnes mais, malheureusement, la solution donnée ne fonctionne pas pour un DataFrame pandas.

15voto

Roshan jha Points 161
# To read data from csv file
Dataset = pd.read_csv('Data.csv')

X = Dataset.iloc[:, :-1].values

# To calculate mean use imputer class
from sklearn.impute import SimpleImputer
imputer = SimpleImputer(missing_values=np.nan, strategy='mean')
imputer = imputer.fit(X[:, 1:3])
X[:, 1:3] = imputer.transform(X[:, 1:3])

14voto

Sunny Barnwal Points 131

Utiliser directement df.fillna(df.mean()) pour remplir toutes les valeurs nulles avec la moyenne

Si vous voulez remplir la valeur nulle avec la moyenne de cette colonne, vous pouvez utiliser ceci

supposer x=df['Item_Weight'] aquí Item_Weight est le nom de la colonne

Ici, nous assignons (remplir les valeurs nulles de x avec la moyenne de x dans x)

df['Item_Weight'] = df['Item_Weight'].fillna((df['Item_Weight'].mean()))

Si vous souhaitez remplir une valeur nulle avec une chaîne de caractères, utilisez la fonction

aquí Outlet_size est le nom de la colonne

df.Outlet_Size = df.Outlet_Size.fillna('Missing')

14voto

pink.slash Points 148

Pandas : Comment remplacer NaN ( nan ) avec la moyenne, la médiane ou d'autres statistiques d'une colonne

Disons que votre DataFrame est df et vous avez une colonne appelée nr_items . Il s'agit de : df['nr_items']

Si vous voulez remplacer el NaN les valeurs de votre colonne df['nr_items'] avec le moyenne de la colonne :

Utiliser la méthode .fillna() :

mean_value=df['nr_items'].mean() df['nr_item_ave']=df['nr_items'].fillna(mean_value)

J'ai créé un nouveau df colonne appelée nr_item_ave pour stocker la nouvelle colonne avec l'élément NaN remplacées par les valeurs mean de la colonne.

Il convient d'être prudent lors de l'utilisation de la fonction mean . Si vous avez valeurs aberrantes il est plus recommandé d'utiliser le median

10voto

guibor Points 380

Une autre option, en plus de celles mentionnées ci-dessus, est la suivante :

df = df.groupby(df.columns, axis = 1).transform(lambda x: x.fillna(x.mean()))

C'est moins élégant que les réponses précédentes pour la moyenne, mais cela pourrait être plus court si vous souhaitez remplacer les nullités par une autre fonction de colonne.

3voto

Utilisation de la bibliothèque sklearn classe de prétraitement

from sklearn.impute import SimpleImputer
missingvalues = SimpleImputer(missing_values = np.nan, strategy = 'mean', axis = 0)
missingvalues = missingvalues.fit(x[:,1:3])
x[:,1:3] = missingvalues.transform(x[:,1:3])

Note : Dans la version récente du paramètre missing_values changement de valeur à np.nan de NaN

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