it-swarm.com.de

Python: Pandas Dataframe, wie die gesamte Spalte mit einem Skalar multipliziert wird

Wie multipliziere ich jedes Element einer bestimmten Spalte meines Datenrahmens mit einem Skalar? (Ich habe versucht, SO zu suchen, kann aber nicht die richtige Lösung finden)

Etwas tun wie: 

df['quantity'] *= -1 # trying to multiply each row's quantity column with -1

gibt mir eine Warnung: 

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

Hinweis: Wenn möglich, möchte ich nicht über den Datenrahmen iterieren und so etwas tun ... da ich denke, dass jede mathematische Standardoperation für eine gesamte Spalte möglich sein sollte, ohne eine Schleife schreiben zu müssen:

for idx, row in df.iterrows():
    df.loc[idx, 'quantity'] *= -1

EDIT

Ich verwende 0.16.2 von Pandas

vollständige Spur:

 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
35
labheshr

Hier ist die Antwort nach ein wenig Recherche:

df.loc[:,'quantity'] *= -1 #seems to prevent SettingWithCopyWarning 
37
labheshr

versuchen Sie es mit der Apply-Funktion. 

df['quantity'] = df['quantity'].apply(lambda x: x*-1)
37
maswadkar

Hinweis: Für alle, die die Pandas 0.20.3 oder höher verwenden und nach einer Antwort suchen, funktionieren alle diese Optionen:

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

was in ... resultiert

   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
27
DJK

Ein bisschen alt, aber ich habe immer noch das gleiche SettingWithCopyWarning bekommen. Hier war meine Lösung:

df.loc[:, 'quantity'] = df['quantity'] * -1
2
Rglish

Neuere Pandas-Versionen verfügen über die Funktion pd.DataFrame.multiply.

df['quantity'] = df['quantity'].multiply(-1)
0
stephenb

Sie können den Index der Spalte verwenden, für die Sie die Multiplikation anwenden möchten

df.loc[:,6] *= -1

Dies multipliziert die Spalte mit dem Index 6 mit -1.

0
DINA TAKLIT

Versuchen Sie df['quantity'] = df['quantity'] * -1.

0
GiannisIordanou

Ich habe diese Warnung mit Pandas 0.22 erhalten. Sie können dies vermeiden, indem Sie very explizit verwenden, indem Sie die Methode assign verwenden:

df = df.assign(quantity = df.quantity.mul(-1))
0
Michael Rice

Ein bisschen zu spät zum Spiel, aber für zukünftige Sucher sollte dies auch funktionieren:

df.quantity = df.quantity  * -1
0
Jack Fleeting