SettingWithCopyWarning apply lambda pandas

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
SinaS
User
Beiträge: 11
Registriert: Freitag 11. März 2022, 14:04

Hallo zusammen,

ich stehe mal wieder auf dem Schlauch, fürchte ich. Gegeben sei eine Funktion, die Datums-ähnliche-Werte in datetime-Objekte umwandelt (convert_anytype_to_datetime). Diese möchte ich in einem pandas-dataframe bei der Spalte Stichtag anwenden und die neue Spalte dt erhalten:

Code: Alles auswählen

df["dt"] = df["Stichtag"].apply(lambda x: convert_anytype_to_datetime(x))
Ich erhalte eine SettingWithCopyWarning. Pandas sagt mir, ich solle loc benutzen. Ich verstehe nicht, warum und wo. Wenn dann ja beim Zugriff auf die Spalte(n), das behebt dein Fehler aber nicht. Bspw. hier bleibt die Warnung erhalten:

Code: Alles auswählen

df.loc[:, "dt"] = df["Stichtag"].apply(lambda x: convert_anytype_to_datetime(x))
Falls es daran liegt: Zuvor habe ich mein df mit einer mask gefiltert. Das sollte pandas doch bei diesem Schritt aber gar nicht mehr wissen und nicht der Grund sein?

Danke an alle!

SinaS
Benutzeravatar
__blackjack__
User
Beiträge: 13079
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@SinaS: Doch, genau diesen Schritt weiss Pandas — es merkt sich wenn implizit eine Kopie erstellt wurde wo der Benutzer vielleicht erwartet, dass es nur ein View ist, um genau davor warnen zu können. Es ist eine Warnung, das heisst es muss nicht heissen, dass es sich um ein Problem handelt, nur dass es ein Problem sein könnte.

Sollte man IMHO aber nicht ignorieren. Der Hinweis auf `loc` bezieht sich auch auf die Operation davor, damit man eben keine Zuweisung auf eine Kopie macht. Wenn Du tatsächlich eine Kopie haben möchtest, mach das an entsprechender Stelle mit einem expliziten `copy()`-Aufruf, dann ist das auch sichergestellt, das es auch *immer* auf einer Kopie passiert. Das ist nämlich die Kehrseite (vor der nicht gewarnt wird), dass wo es möglich ist eben keine Kopie, sondern nur ein View erstellt wird. Und das kann auch bei den gleichen Operationen, abhängig von den Werten passieren.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten