為什麼Python的.loc[row_indexer, col_indexer]會觸發「SettingWithCopyWarning」以及如何解決?

Susan Sarandon
發布: 2024-10-30 07:18:03
原創
520 人瀏覽過

Why Does Python's .loc[row_indexer, col_indexer] Trigger

使用.loc[row_indexer, col_indexer] 時克服Python 中的“SettingWithCopyWarning”

嘗試使用.loc[row_indexer 修改DataDataFrame精神切片時出現“SetWunting” ],儘管理論上避免了複製操作。在這種情況下,有必要檢查另一個 DataFrame 是否會影響目前的 DataFrame。

重現錯誤:

    從字典建立DataFrame df .
  1. 建立一個新欄位並使用.loc .loc[0, 'new_column'] = 100.
  2. 使用過濾器從df 建立一個新的DataFrame new_df:new_df = df.loc[df.col1>2].
  3. 嘗試更新new_df 中的值: new_df.loc[2, 'new_column'] = 100.這將觸發“SettingWithCopyWarning。”

解決方案- 使用.copy():

要解決此問題,在建立時使用.copy() 至關重要過濾後的資料幀new_df。這將建立原始 DataFrame 的副本,允許修改而不觸發警告。

<code class="python">new_df_copy = df.loc[df.col1>2].copy()
new_df_copy.loc[2, 'new_column'] = 100</code>
登入後複製
此方法消除了「SettingWithCopyWarning」。

避免 Convert_objects(convert_numeric= 的警告)正確):

“convert_objects(convert_numeric=True)”函數也可能觸發警告。為了避免這種情況,請在應用函數之前使用.copy():

<code class="python">value1['Total Population'] = value1['Total Population'].astype(str).copy().convert_objects(convert_numeric=True)</code>
登入後複製
總之,在創建過濾的DataFrame 或應用修改DataFrame 的數據操作函數之前使用.copy() 將阻止“ SettingWithCopyWarning. 」這確保了對原始DataFrame 的副本執行修改,避免任何意外行為。

以上是為什麼Python的.loc[row_indexer, col_indexer]會觸發「SettingWithCopyWarning」以及如何解決?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!