為什麼 Pandas 的 `s.replace` 基於字典的值替換速度很慢?

DDD
發布: 2024-11-19 21:45:03
原創
516 人瀏覽過

Why is Pandas' `s.replace` Slow for Dictionary-Based Value Replacement?

了解Pandas 中s.replace 和其他值替換方法之間的表現差距

使用字典替換Pandas 系列中的值是一個Pandas 系列中的值是一個共同任務。然而,與列表推導等替代方法相比,s.replace(此操作的建議方法)通常表現出明顯較慢的性能。

s.replace 緩慢的根本原因

s.replace 除了簡單的字典映射之外還執行其他處理。它處理邊緣情況和罕見情況,這需要更複雜和耗時的操作。具體來說,s.replace 將字典轉換為列表,檢查巢狀字典,並迭代列表以將鍵和值提供給單獨的替換函數。這種開銷會顯著減慢流程。

最佳化值替換

要最佳化值替換,應遵循以下準則:

  • 當所有系列值都被字典鍵覆蓋時,使用s.map(d)。 s.map 在這種情況下表現出了出色的性能。
  • 當超出 5% 時使用 s.map(d).fillna(s['A']).astype(int)系列值由字典鍵覆蓋。此方法結合了 s.map 的效率和處理缺失值的能力。
  • 當需要少量值(少於 5%)時使用 s.replace(d)被替換。在這種情況下 s.replace 相對較快。

基準測試

基準測試結果顯示了各種替換方法之間的性能差異:

測試1 -完整Map

%timeit df['A'].replace(d)  # 1.98s
%timeit df['A'].map(d)      # 84.3ms
%timeit [d[i] for i in lst]  # 134ms
登入後複製

測試2 -部分Map

%timeit df['A'].replace(d)                  # 20.1ms
%timeit df['A'].map(d).fillna(df['A']).astype(int)  # 111ms
%timeit [d.get(i, i) for i in lst]                  # 243ms
登入後複製

這些結果清楚地表明s.map 及其修改版本的執行速度明顯快於s .replace,特別是當系列值的很大一部分被字典鍵覆蓋時。

以上是為什麼 Pandas 的 `s.replace` 基於字典的值替換速度很慢?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板