pandas.apply() 是一個強大的工具允許使用者對 DataFrame 或 Series 的行或列應用函數。然而,眾所周知,它比其他方法慢,從而導致了何時應該使用和避免它的問題。本文探討了 apply() 效能問題背後的原因,並提供如何消除其使用的實用指南。
apply() 計算的結果為每行或每列都是單獨的,當向量化運算可用時,這可能效率低。此外,apply() 會因處理對齊、處理複雜參數和分配記憶體而產生開銷。
盡可能使用向量化替代方案。 向量化操作(例如NumPy 或pandas 自己的向量化函數提供的操作)可同時對整個數組進行操作,從而帶來顯著的性能
避免使用apply() 進行字串操作。 Pandas 提供了最佳化的字串函數,這些函數是向量化的,並且比基於字串的 apply() 呼叫更快。
使用列表推導式進行列爆炸。 使用 apply() 爆炸清單的列效率很低。偏好使用清單推導式或將列轉換為清單並將其傳遞給 pd.DataFrame()。
未針對 DataFrame 進行向量化的函數 。有些函數是針對系列進行向量化的,但不是針對資料幀進行向量化的。例如,pd.to_datetime() 可以與 apply() 一起使用,將多列轉換為日期時間。
需要按行處理的複雜函數。在某些情況下,可能需要套用需要按行處理的複雜函數。但是,如果可能的話,應該避免這種情況。
使用向量化 GroupBy 運算。 GroupBy 操作具有更有效率的向量化替代方案。
避免使用 apply() 進行鍊式轉換。 在內部連結多個操作GroupBy.apply() 可能會導致不必要的迭代。如果可能,請使用單獨的 GroupBy 呼叫。
apply() 對第一行操作兩次。 需要確定函數是否有副作用,這可以影響效能。
記憶體消耗。 apply() 消耗大量內存,使得不適合內存受限的應用程式。
pandas.apply() 是一個可訪問的函數,但應仔細考慮其性能限制。為了避免效能問題,必須確定向量化替代方案,探索字串運算的有效選項,並在沒有其他選項可用時明智地使用 apply() 。透過了解其效率低下的原因,開發人員可以編寫高效且可維護的 pandas 程式碼。
以上是我什麼時候應該使用(以及什麼時候應該避免)pandas.apply()?的詳細內容。更多資訊請關注PHP中文網其他相關文章!