Lassen Sie uns sagen, dass ich die folgende Pandas Datenrahmen haben:Pandas: Operationen mit groupby Ausbeute SettingWithCopyWarning
df = pd.DataFrame({
'team': ['Warriors', 'Warriors', 'Warriors', 'Rockets', 'Rockets'],
'player': ['Stephen Curry', 'Klay Thompson', 'Kevin Durant', 'Chris Paul', 'James Harden']})
Wenn ich zu einer Gruppe auf der team
Spalte versuchen, eine Operation durchführen erhalte ich eine SettingWithCopyWarning
:
for team, team_df in df.groupby(by='team'):
# team_df = team_df.copy() # produces no warning
team_df['rank'] = 10 # produces warning
team_df.loc[:, 'rank'] = 10 # produces warning
SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_index,col_indexer] = value instead
df_team['rank'] = 10
Wenn ich die Zeile auskommentiere, die eine Kopie des Sub-DataFrame erzeugt, bekomme ich den Fehler nicht. Ist das im Allgemeinen die beste Vorgehensweise, um diese Warnung zu vermeiden, oder mache ich etwas falsch?
Hinweis Ich möchte den ursprünglichen Dataframe df
nicht bearbeiten. Ich weiß auch, dass dieses Beispiel besser gemacht werden kann, aber mein Anwendungsfall ist viel komplexer und erfordert die Gruppierung eines originalen DataFrame und das Ausführen einer Reihe von Operationen basierend auf einem anderen DataFrame und den Spezifikationen dieser einzigartigen Gruppe.
Great Link zum Artikel! – piRSquared
@piRSquared: Ich habe von [dem Artikel] (https://www.dataquest.io/blog/settingwithcopywarning/) von [Alexander] (https://stackoverflow.com/users/2411802/alexander) [hier] erfahren (https://stackoverflow.com/questions/38809796/pandas-still-getting-settingwithcopywarning-even-after-using-loc/38810015#comment76884959_38809796). – unutbu