Heim >Backend-Entwicklung >Python-Tutorial >Wie kann man Pandas' SettingWithCopyWarning verstehen und handhaben?

Wie kann man Pandas' SettingWithCopyWarning verstehen und handhaben?

Barbara Streisand
Barbara StreisandOriginal
2024-12-26 19:26:14137Durchsuche

How to Understand and Handle Pandas' SettingWithCopyWarning?

SettingWithCopyWarning: Erklärung und Handhabung in Pandas

Das SettingWithCopyWarning, eingeführt in Pandas 0.13.0rc1, warnt Benutzer vor potenziellen Problemen beim Festlegen von Werten auf Slices oder Kopien von DataFrames. Diese Warnung soll Verwirrung und unerwartetes Verhalten verhindern.

Verstehen der Warnung

Die Warnung entsteht aufgrund von „verketteten Zuweisungen“, bei denen ein Wert auf einem Slice oder einer Kopie eines DataFrame festgelegt wird, z als:

df[df['A'] > 2]['B'] = new_val  # new_val not set in df

In diesem Beispiel gibt die erste Auswahl (df[df['A'] > 2]) eine Kopie zurück und versucht, dies zu tun Wenn Sie „B“ für diese Kopie festlegen, wird der ursprüngliche DataFrame „df“ nicht aktualisiert. Um „df“ korrekt zu aktualisieren, verwenden Sie den Loc-Accessor:

df.loc[df['A'] > 2, 'B'] = new_val

Umgang mit der Warnung

1. Ignorieren der Warnung

Wenn Sie sicher sind, dass die Änderungen nicht auf den ursprünglichen DataFrame zurückgespiegelt werden müssen, können Sie die Warnung deaktivieren:

import pandas as pd
pd.options.mode.chained_assignment = None  # default='warn'

2. Verwenden von loc und iloc

Für Zuweisungen auf Slices oder Kopien verwenden Sie die loc- oder iloc-Accessoren, die eine direkte Änderung des ursprünglichen DataFrame ermöglichen:

df.loc[df['A'] > 2, 'B'] = new_val
df.iloc[2:5, 4] = [1, 8, 8]

3. Erstellen einer Kopie

Wenn Sie eine neue Referenz für Ihren DataFrame benötigen, erstellen Sie eine Kopie mit DataFrame.copy(), bevor Sie sie ändern:

new_df = df.copy()
new_df['C'] = df['A'] + df['B']

4. Den DataFrame neu generieren

In Ihrem speziellen Fall könnten Sie, anstatt das ursprüngliche quote_df zu ändern, einen neuen DataFrame mit den gewünschten Änderungen neu generieren:

quote_df = pd.read_csv(StringIO(str_of_all), sep=',', names=list('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefg'))
quote_df.rename(columns={'A':'STK', 'B':'TOpen', ...}, inplace=True)
quote_df['TVol'] = quote_df['TVol'] / TVOL_SCALE
quote_df['TAmt'] = quote_df['TAmt'] / TAMT_SCALE
quote_df['TDate'] = quote_df.TDate.map(lambda x: x[0:4]+x[5:7]+x[8:10])

Das obige ist der detaillierte Inhalt vonWie kann man Pandas' SettingWithCopyWarning verstehen und handhaben?. 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