找到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中文網其他相關文章!