Ausgabe
Beim Versuch, eine neue Spalte im netc df zu erstellen, erhalte ich die Warnung
netc["DeltaAMPP"] = netc.LOAD_AM - netc.VPP12_AM
C:\Anaconda\lib\site-packages\ipykernel\__main__.py:1: 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
Was ist der richtige Weg, um ein Feld in der neueren Version von Pandas zu erstellen, um die Warnung zu vermeiden?
pd.__version__
Out[45]:
u'0.19.2+0.g825876c.dirty'
Lösung
Versuchen Sie, wie in der Fehlermeldung angegeben, mit .loc[row_indexer,col_indexer]
die neue Spalte zu erstellen.
netc.loc[:,"DeltaAMPP"] = netc.LOAD_AM - netc.VPP12_AM.
Anmerkungen
Laut Pandas Indexing Docs sollte Ihr Code funktionieren.
netc["DeltaAMPP"] = netc.LOAD_AM - netc.VPP12_AM
wird übersetzt
netc.__setitem__('DeltaAMPP', netc.LOAD_AM - netc.VPP12_AM)
Was vorhersagbares Verhalten haben sollte. Das SettingWithCopyWarning
ist nur dazu da, Benutzer vor unerwartetem Verhalten während einer verketteten Zuweisung zu warnen (was Sie nicht tun). Allerdings, wie in den Dokumenten erwähnt,
Manchmal
SettingWithCopy
wird eine Warnung angezeigt, wenn keine offensichtliche verkettete Indizierung stattfindet. Dies sind die Käfer,SettingWithCopy
die entwickelt wurden, um sie zu fangen! Pandas versucht wahrscheinlich, Sie zu warnen, dass Sie Folgendes getan haben:
Die Dokumentation gibt dann ein Beispiel dafür, wann dieser Fehler auftreten könnte, selbst wenn er nicht erwartet wird. Also kann ich ohne mehr Kontext nicht sagen, warum das passiert.
Beantwortet von – Filip Kilibarda
Antwort geprüft von – Marilyn (FixError Volunteer)