首頁  >  文章  >  後端開發  >  為什麼使用字典替換 Pandas 系列中的值很慢,如何提升效能?

為什麼使用字典替換 Pandas 系列中的值很慢,如何提升效能?

Susan Sarandon
Susan Sarandon原創
2024-11-13 05:46:02654瀏覽

Why is Using Dictionaries to Replace Values in Pandas Series Slow, and How Can You Improve Performance?

使用字典提高 Pandas 系列中值替換的表現

使用字典替換 Pandas 系列中的值是一項常見任務。雖然建議使用 s.replace(d) 替換值,但它可能比使用簡單的列表理解慢得多。

表現緩慢的原因

表現緩慢s.replace(d) 的作用源自於它對邊緣情況和罕見情況的處理。它涉及:

  • 將字典轉換為列表。
  • 迭代列表並檢查巢狀字典。
  • 將鍵和值的迭代器輸入到替換功能。

替代方法

要提高效能,請考慮使用以下方法:

  • 完整地圖:
  • 完整地圖: >如果所有值都在系列由字典映射。此方法高效且始終更快。

部分映射:如果字典僅映射一小部分(例如,小於5%)值,請使用s.map(d ).fillna(s['A']). astype(int).這種方法將映射與填充相結合,避免了昂貴的迭代。

基準測試
##### Full Map #####

d = {i: i+1 for i in range(1000)}

%timeit df['A'].replace(d)                          # Slow (1.98s)
%timeit df['A'].map(d)                              # Fast (84.3ms)

##### Partial Map #####

d = {i: i+1 for i in range(10)}

%timeit df['A'].replace(d)                          # Intermediate (20.1ms)
%timeit df['A'].map(d).fillna(df['A']).astype(int)  # Faster (111ms)

基準測試展示了s.replace(d), s 之間的性能差異.map(d) 和列表理解:

這表示對於完整或部分映射,s.map(d) 始終比s.replace(d) 更快。

結論取決於字典覆蓋的完整性, s.map(d) 或s.map(d).fillna(s['A']) .astype(int) 應該優先於s.replace(d) 用於Pandas 系列中的高效值替換。

以上是為什麼使用字典替換 Pandas 系列中的值很慢,如何提升效能?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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