[FIXED] Richtige Methode zum Festlegen einer neuen Spalte in Pandas DataFrame, um SettingWithCopyWarning zu vermeiden

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 SettingWithCopyWarningist 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 SettingWithCopywird eine Warnung angezeigt, wenn keine offensichtliche verkettete Indizierung stattfindet. Dies sind die Käfer, SettingWithCopydie 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)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like