(數據科學學習手札151)速通pandas2.0新版本乾貨內容

本文示例代碼已上傳至我的Github倉庫https://github.com/CNFeffery/DataScienceStudyNotes

1 簡介

  大家好我是費老師,前兩天pandas正式發佈了其2.0.0版本,作爲一次大版本更新,pandas針對底層進行了大量的重構以優化性能和穩定性,其有關這次更新內容的說明文檔更是洋洋灑灑非常繁雜。

  我們作爲日常使用pandas的用戶,並不需要了解過多底層更新內容,只需要學習如何使用新版pandas爲自己提質提效就行,今天的文章話不多說,直接帶大家速通新版pandas乾貨內容😎。

2 速通pandas 2.0新版本乾貨內容

  爲了下文中方便進行演示,我們創建新的虛擬環境來測試新版pandas性能表現:

conda create -n pandas2.0-test python=3.8 -y
conda activate pandas2.0-test
pip install pandas pyarrow jupyterlab

2.1 數據讀取及運算性能提升

  我們對新版pandas的最大期待就是1個字——快,因爲經過15年的發展,pandas的分析功能已經相當豐富,API語法也足夠簡單高效,但在處理較大型數據集時的速度和內存佔用屬實捉急。

  因此新版pandas引入了基於高性能運算庫arrow的一系列常用數據類型,作爲對默認基於numpy的數據類型的代替。

  我們測試使用到的數據集來自(https://www.kaggle.com/datasets/kartik2112/fraud-detection),針對其中的fraudTrain.csv文件進行讀取,這個文件大小爲三百多兆,我們分別採用3種不同的方式進行讀取:

  可以看到,新版pandas中最優的參數組合,足足比默認的參數快了將近20倍🚀,查看使用pyarrow數據類型後端讀入的數據框,可以發現類型都已經切換到pyarrow的常用類型:

  得益於新的數據類型支持,很多常用的運算操作都要比默認情況下快上很多,其中數值型運算提升幅度很小,但是針對字符型的提升幅度相當大,如下面例子中的startswith()判斷就快了接近50倍:

2.2 “修改時複製”機制

  “修改時複製”作爲一種優化機制,在1.5版本中開始引入pandas,並在2.0中對pandas中大多數運算操作進行了支持,且很有可能在3.0版本中作爲默認的策略。

  一言以蔽之,“修改時複製”機制就是一種惰性複製機制,可以幫助我們在運算過程中自動避免很多不必要的數據複製操作,下面我們來看一些例子:

  在默認情況下,如果我們像下面這樣將dffield1列直接賦值給了field1,再對field1中的值進行修改,就會導致原先的df中的對應值也被修改了,這種機制本意是避免賦值時頻繁的數據複製佔用內存,但很容易讓我們不小心篡改了原始數據:

  而“修改時複製”機制,則會在頻繁複制數據,和避免篡改數據之間進行兼顧(當前版本需要設置全局參數mode.copy_on_writeTrue以啓用):

  也就是說,新版pandas中的“修改時複製”機制,會自動檢測從源數據中衍生出的數據自身是否發生了值修改,並在修改時才進行數據複製操作,保證了分析過程的高效性和穩定性😋。

  除了上述介紹的內容外,新版pandas還進行了大量的性能優化更新,這些更新無需我們改變過去的pandas寫法,而是在我們的日常使用過程中”潤物細無聲“地幫我們節省了計算開銷,可以說,作爲pandas老用戶,切換到2.0版本的過程是無痛且絲滑的😀,大家可以放心地進行更新,更多更新內容細節請移步https://pandas.pydata.org/docs/whatsnew/v2.0.0.html


  以上就是本文的全部內容,歡迎在評論區與我進行討論~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章