Modification d'une valeur dans un pandas DataFrame à l'aide de la méthode .loc et de l'opérateur =

J'ai une trame de données avec des valeurs manquantes que j'essaie de remplir. J'ai créé une autre trame de données qui contient les données nécessaires pour remplir les valeurs manquantes. Les deux dataframes ont des colonnes year& monthque j'utilise pour décider de la valeur à remplir. Le dataframe avec les valeurs manquantes est appelé full_arrangedet le dataframe avec les valeurs que je souhaite importer dans le premier est appelé median_values.

Pour remplir les données manquantes, j'ai écrit le code suivant:

for column in full_arranged.drop(['year','month','day', 'date'], axis = 1).columns:
for year in range(2016,2019):
for month in range(1,13):
temp_val = median_values.loc[(median_values['year'] == year) & (median_values['month'] == month), column]
full_arranged.loc[(full_arranged[column].isnull()) & (full_arranged['year'] == year) & (full_arranged['month'] == month), column] = temp_val

Après avoir exécuté ce code, je vérifie les valeurs manquantes, mais aucune d'entre elles n'a changé. Qu'est-ce que je rate?

J'ai aussi essayé de faire la même chose mais avec la méthode pandas pd.fillnaet j'ai obtenu les mêmes résultats (les valeurs manquantes sont de type np.nan mais j'ai aussi fatigué d'exécuter le même code avec pd.fillnaet pd.nan et cela n'a pas fonctionné).

full_arrangedressemble à ça:


















anmoisvaleur_1valeur_2
20173Dans3.52

Solution du problème

Un exemple minimal des deux DF serait utile.

However, the condition & (median_values[column] == column) seems strange.

Vous ne voulez pas faire quelque chose comme ça ? :

= median_values.loc[(median_values['year'] == year) & (median_values['month'] == month),column]

So select the row by year and month and return the value of the column of the median_values dataframe?

Commentaires

Posts les plus consultés de ce blog

Erreur Symfony : "Une exception a été levée lors du rendu d'un modèle"

Détecter les appuis sur les touches fléchées en JavaScript

Une chaîne vide donne "Des erreurs ont été détectées dans les arguments de la ligne de commande, veuillez vous assurer que tous les arguments sont correctement définis"