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
Freigeben: 2024-10-29 12:12:02
Original
691 Leute haben es durchsucht

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
Nach dem Login kopieren

Zunächst gibt es keine Warnungen. Das Erstellen eines neuen DataFrames basierend auf einer Teilmenge von df:

new_df = df.loc[df.col1 > 2]
Nach dem Login kopieren

und der anschließende Versuch, den neuen DataFrame mithilfe von .loc:

new_df.loc[2, 'new_column'] = 100
Nach dem Login kopieren

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
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage