為什麼 np.vectorize() 比 df.apply() 對於 Pandas 列創建更快?

Susan Sarandon
發布: 2024-10-27 04:34:30
原創
846 人瀏覽過

  Why is np.vectorize() Faster than df.apply() for Pandas Column Creation?

Pandas apply 與 np.vectorize 的效能比較

據觀察,np.vectorize() 可以比 df 快得多。基於 Pandas DataFrame 中的現有欄位建立新欄位時使用 apply() 。觀察到的性能差異源自於這兩種方法所採用的底層機制。

df.apply() 與 Python 層級循環

df.apply() 本質上建立一個 Python 層級的循環,迭代 DataFrame 的每一行。正如提供的基準測試中所演示的,與真正的向量化計算相比,Python 級循環(例如列表推導式和映射)都相對較慢。

np.vectorize() 與 df.apply()

np.vectorize() 將使用者定義函數轉換為通用函數 (ufunc)。 Ufunc 經過高度最佳化,可以利用基於 C 的程式碼和最佳化演算法對 NumPy 陣列執行逐元素運算。這與 df.apply() 形成對比,df.apply() 對 Pandas Series 物件進行操作並產生額外的開銷。

真正的向量化:最佳效能

真正高效的列創建,強烈建議在 NumPy 中進行向量化計算。 numpy.where 等操作以及使用 df["A"] / df["B"] 進行直接逐元素除法的速度非常快,並且避免了與循環相關的開銷。

Numba 最佳化

為了獲得更高的效率,可以使用Numba 進一步最佳化循環,Numba 是一種將Python 函數轉換為最佳化的C 程式碼的編譯器。 Numba 可將執行時間縮短至微秒,顯著優於 df.apply() 和 np.vectorize()。

結論

雖然np.vectorize() 可能提供對df.apply() 進行了一些改進,它並不是NumPy 中矢量化計算的真正替代品。為了實現最大效能,請利用 Numba 最佳化或 NumPy 中的直接向量化操作在 Pandas DataFrames 中建立新欄位。

以上是為什麼 np.vectorize() 比 df.apply() 對於 Pandas 列創建更快?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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