首頁 >後端開發 >Python教學 >為什麼修改從子集派生的 DataFrame 時會出現「SettingWithCopyWarning」?

為什麼修改從子集派生的 DataFrame 時會出現「SettingWithCopyWarning」?

Susan Sarandon
Susan Sarandon原創
2024-10-29 12:12:02659瀏覽

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

找到SettingWithCopyWarning的罪魁禍首

嘗試使用.loc[row_indexer, col_indexer] = value

嘗試使用.loc[row_indexer, col_indexer] = valueue則持續存在時,「Setuec.」持續存在。此問題源自於從另一個 DataFrame 存取 DataFrame 切片而不呼叫 .copy() 方法。

逐步錯誤重現

考慮以下程式碼:
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

最初,沒有警告。但是,基於 df:
new_df = df.loc[df.col1 > 2]

的子集建立新 DataFrame,然後嘗試使用 .loc:
new_df.loc[2, 'new_column'] = 100

修改新 DataFrame 會觸發警告。

解決方案:對從子集派生的資料幀使用.copy()

要解決此問題,請在基於子集建立新的DataFrame 時始終使用.copy() 方法現有DataFrame 的子集。
new_df_copy = df.loc[df.col1 > 2].copy()
new_df_copy.loc[2, 'new_column'] = 100

透過呼叫 .copy(),您可以建立子集的獨立副本,避免在修改值時出現警告。

以上是為什麼修改從子集派生的 DataFrame 時會出現「SettingWithCopyWarning」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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