首頁 >後端開發 >Python教學 >如何理解處理Pandas的SettingWithCopyWarning?

如何理解處理Pandas的SettingWithCopyWarning?

Barbara Streisand
Barbara Streisand原創
2024-12-26 19:26:14137瀏覽

How to Understand and Handle Pandas' SettingWithCopyWarning?

SettingWithCopyWarning:Pandas 中的解釋與處理

Pandas 0.13.0rc1 中引入的SettingWithCopyWarning 會提醒使用者在DataFrame 的切片或副本上設定問題。此警告旨在防止混淆和意外行為。

理解警告

該警告是由於「鍊式分配」而產生的,其中在DataFrame 的切片或副本上設定值,例如as:

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

在此範例中,第一個選擇(df[df['A'] > 2]) 傳回一個副本,並嘗試在此副本上設定「B」不會更新原始DataFrame“df”。要正確更新“df”,請使用 loc 訪問器:

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

處理警告

1。忽略警告

如果您確定不需要將變更反映回原始DataFrame,則可以停用警告:

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

2.使用loc 和iloc

對於切片或副本的賦值,請使用loc 或iloc 存取器,它們允許直接修改原始DataFrame:

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

3。建立副本

如果您需要DataFrame 的新引用,請在修改之前使用DataFrame.copy() 建立副本:

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

4.重新產生DataFrame

在在您的具體情況下,您可以重新產生具有所需變更的新DataFrame,而不是修改原始quote_df:

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])

以上是如何理解處理Pandas的SettingWithCopyWarning?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn