Heim >Backend-Entwicklung >Python-Tutorial >Warum tritt „SettingWithCopyWarning' auf, wenn von Teilmengen abgeleitete DataFrames geändert werden?
Den Übeltäter von SettingWithCopyWarning finden
Beim Versuch, einen DataFrame mit .loc[row_indexer, col_indexer] = value zu ändern, wird „SettingWithCopyWarning“ besteht fort. Dieses Problem entsteht durch den Zugriff auf ein DataFrame-Slice von einem anderen DataFrame aus, ohne die Methode .copy() aufzurufen.
Schrittweise Fehlerreproduktion
Beachten Sie den folgenden Code:
import pandas as pd d = {'col1': [1, 2, 3, 4], 'col2': [3, 4, 5, 6]} df = pd.DataFrame(data=d) df['new_column'] = None df.loc[0, 'new_column'] = 100
Zunächst gibt es keine Warnungen. Das Erstellen eines neuen DataFrames basierend auf einer Teilmenge von df:
new_df = df.loc[df.col1 > 2]
und der anschließende Versuch, den neuen DataFrame mithilfe von .loc:
new_df.loc[2, 'new_column'] = 100
zu ändern, löst jedoch die Warnung aus.
Lösung: Verwenden von .copy() für von einer Teilmenge abgeleitete Datenrahmen
Um dieses Problem zu beheben, verwenden Sie immer die Methode .copy(), wenn Sie einen neuen Datenrahmen basierend auf a erstellen Teilmenge eines vorhandenen DataFrame.
new_df_copy = df.loc[df.col1 > 2].copy() new_df_copy.loc[2, 'new_column'] = 100
Durch Aufrufen von .copy() erstellen Sie eine unabhängige Kopie der Teilmenge und vermeiden so die Warnung beim Ändern von Werten.
Das obige ist der detaillierte Inhalt vonWarum tritt „SettingWithCopyWarning' auf, wenn von Teilmengen abgeleitete DataFrames geändert werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!