錯誤使用鍊式賦值如何導致 Pandas 出現意外結果?

Mary-Kate Olsen
發布: 2024-10-24 06:15:30
原創
479 人瀏覽過

How Can Incorrect Use of Chained Assignments Lead to Unexpected Results in Pandas?

Pandas 中的鍊式賦值

在Pandas 中使用資料幀時,鍊式賦值可能會導致意外行為或誤報,如設定WithCopyWarning。此警告旨在提醒使用者鍊式賦值的潛在陷阱。

鍊式賦值如何運作

在 Pandas 中,大多數方法呼叫都會傳回物件的副本。這意味著當您執行鍊式分配時,例如 df['column'] = df['column'].fillna(...),您可能正在修改原始資料幀的副本而不是原始資料幀本身。

使用.ix()、.iloc() 和.loc() 進行連結的效果

ix()、iloc() 和loc 的選擇()會影響鍊式賦值行為:

  • ix() 已棄用,不應使用。
  • iloc() 使用整數索引檢索資料。此方法只能直接存取元素,不支援鍊式賦值。
  • loc() 使用標籤檢索資料。使用 loc() 的鍊式賦值建立一個新對象,該對象可能會也可能不會修改原始資料幀。

最佳編碼實踐

避免潛在問題鍊式賦值,建議將操作結果明確分配給新變數。例如,不要使用:

<code class="python">df['amount'] = df['amount'].fillna(...)</code>
登入後複製

使用:

<code class="python">df['amount_updated'] = df['amount'].fillna(...)</code>
登入後複製

誤報

某些鍊式分配即使在執行時也可能會觸發警告不修改原始資料框。在這種情況下,您可以使用以下方法關閉警告:

<code class="python">pd.set_option('chained_assignment', None)</code>
登入後複製

範例

考慮以下程式碼:

<code class="python">data['amount'] = data.apply(lambda row: function1(row, date, qty), axis=1) 
data['amount'] = data['amount'].astype(float)</code>
登入後複製

此程式碼可能會引發SettingWithCopyWarning,因為data['amount'] 被指派了兩次。要解決此問題,請將第一個操作的結果指派給新變數:

<code class="python">temp_amount = data.apply(lambda row: function1(row, date, qty), axis=1) 
data['amount'] = temp_amount.astype(float)</code>
登入後複製

以上是錯誤使用鍊式賦值如何導致 Pandas 出現意外結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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