Heim >Backend-Entwicklung >Python-Tutorial >Warum tritt „SettingWithCopyWarning' auf, wenn von Teilmengen abgeleitete DataFrames geändert werden?

Warum tritt „SettingWithCopyWarning' auf, wenn von Teilmengen abgeleitete DataFrames geändert werden?

Susan Sarandon
Susan SarandonOriginal
2024-10-29 12:12:02659Durchsuche

Why Does `SettingWithCopyWarning` Occur When Modifying DataFrames Derived from Subsets?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn