Les Pandas d'avertissement lors de l'utilisation de la carte: Une valeur est d'essayer d'être mis sur une copie d'une tranche à partir d'un DataFrame
J'ai le code suivant et il fonctionne. Fondamentalement renomme les valeurs dans les colonnes de sorte qu'ils peuvent être fusionné plus tard.
pop = pd.read_csv('population.csv')
pop_recent = pop[pop['Year'] == 2014]
mapping = {
'Korea, Rep.': 'South Korea',
'Taiwan, China': 'Taiwan'
}
f= lambda x: mapping.get(x, x)
pop_recent['Country Name'] = pop_recent['Country Name'].map(f)
Avertissement:
Une valeur est d'essayer d'être mis sur une copie d'une tranche à partir d'un DataFrame.
Essayez d'utiliser .loc[row_indexer,col_indexer] = valeur à la place
Voir les mises en garde dans la documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
pop_recent['Nom du Pays'] = pop_recent['Country Name'].carte(f)
Je n'ai google ce! Mais aucun des exemples semblent être à l'aide de la carte, donc je suis à une perte...
- Comment avez-vous pop_recent ?
- Ajouté un peu de code...
- Essayez ce que l'avertissement est révélatrice d' - pop.loc [pop (['année'] == 2014), 'Pays Nom'] = pop.loc [pop (['année'] == 2014), 'Pays Nom'].carte(f)
- N'est-ce pas inutilement complexes? J'ai déjà filtré sur d'autres valeurs que celles de 2014.
- Que le filtrage est la question. Découvrez ma réponse.
Vous devez vous connecter pour publier un commentaire.
Le problème est avec enchaînés indexation , ce que vous êtes en train d'essayer de le faire est de fixer des valeurs -
pop[pop['Year'] == 2014]['Country Name']
- ce ne serait pas le travail la plupart du temps (comme très bien expliqué dans la documentation) que c'est deux appels différents et que l'un des appels peut retourner une copie du dataframe (je crois que le booléen indexation) est de retour de la copie de la dataframe).Par conséquent, lorsque vous essayez de définir les valeurs de cette copie, il ne reflète pas dans l'original dataframe. Exemple -
Comme l'a noté , au lieu de enchaînés indexation, vous devez utiliser
DataFrame.loc
à l'index les lignes ainsi que les colonnes de mettre à jour en un seul appel, d'éviter cette erreur. Exemple -Ou si cela semble trop long pour vous, vous pouvez créer un masque (boolean dataframe) à l'avance et de les assigner à une variable, et de l'utiliser dans la déclaration ci-dessus. Exemple -
Démo -
Démo avec le masque méthode -
Je vous recommande pour réinitialiser les indices dans
pop_recent = pop[pop['Year'] == 2014]
.Si vous voulez appliquer une fonction à un certain colonne de dataframe, essayez d'utiliser la fonction
appliquer
fonction de DataFrame de l'API. Simple démo:De sortie: