web-dev-qa-db-fra.com

Manière correcte de définir la valeur d’une tranche dans pandas

J'ai un pandas dataframe: data. Il a des colonnes ["name", 'A', 'B']

Ce que je veux faire (et travailler) est:

d2 = data[data['name'] == 'fred'] #This gives me multiple rows
d2['A'] = 0

Cela définira la colonne A sur les lignes fred à 0. J'ai aussi fait:

indexes = d2.index
data['A'][indexes] = 0

Cependant, les deux me donnent le même avertissement:

/Users/brianp/work/cyan/venv/lib/python2.7/site-packages/pandas/core/indexing.py:128: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy

Comment pandas VEUX-T-JE faire cela?

37
Brian Postow

Ceci est un avertissement très commun des pandas. Cela signifie que vous écrivez dans une tranche de copie et non dans les données d'origine. Il est donc possible que cela ne s'applique pas aux colonnes d'origine en raison d'une confusion dans l'assignation chaînée. Veuillez lire ceci post . Il a une discussion détaillée sur ce SettingWithCopyWarning. Dans ton cas je pense que tu peux essayer

data.loc[data['name'] == 'fred', 'A'] = 0
65
Andreas Hsieh