Comment puis-je multiplier chaque élément d'une colonne donnée de mon cadre de données avec un scalaire? (J'ai essayé de regarder SO, mais je n'arrive pas à trouver la bonne solution)
Faire quelque chose comme:
df['quantity'] *= -1 # trying to multiply each row's quantity column with -1
me donne un avertissement:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
Remarque: Si possible, je ne souhaite pas effectuer une itération sur le cadre de données et faire quelque chose comme ceci ... car je pense que toute opération mathématique standard sur une colonne entière devrait être possible sans avoir à écrire une boucle:
for idx, row in df.iterrows():
df.loc[idx, 'quantity'] *= -1
MODIFIER:
Je cours 0.16.2
de pandas
trace complète:
SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
See the the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
self.obj[item] = s
Voici la réponse après quelques recherches:
df.loc[:,'quantity'] *= -1 #seems to prevent SettingWithCopyWarning
essayez d'utiliser la fonction apply.
df['quantity'] = df['quantity'].apply(lambda x: x*-1)
Remarque: pour ceux qui utilisent les pandas 0.20.3 et supérieurs et cherchent une réponse, toutes ces options fonctionneront:
df = pd.DataFrame(np.ones((5,6)),columns=['one','two','three',
'four','five','six'])
df.one *=5
df.two = df.two*5
df.three = df.three.multiply(5)
df['four'] = df['four']*5
df.loc[:, 'five'] *=5
df.iloc[:, 5] = df.iloc[:, 5]*5
qui se traduit par
one two three four five six
0 5.0 5.0 5.0 5.0 5.0 5.0
1 5.0 5.0 5.0 5.0 5.0 5.0
2 5.0 5.0 5.0 5.0 5.0 5.0
3 5.0 5.0 5.0 5.0 5.0 5.0
4 5.0 5.0 5.0 5.0 5.0 5.0
Un peu vieux, mais je recevais toujours le même SettingWithCopyWarning. Voici ma solution:
df.loc[:, 'quantity'] = df['quantity'] * -1
Les versions plus récentes des pandas ont la fonction pd.DataFrame.multiply.
df['quantity'] = df['quantity'].multiply(-1)
Essayez df['quantity'] = df['quantity'] * -1
.
J'ai eu cet avertissement en utilisant Pandas 0.22. Vous pouvez éviter cela en étant very explicit en utilisant la méthode assign :
df = df.assign(quantity = df.quantity.mul(-1))