本文示例代碼已上傳至我的
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
版本中作爲默認的策略。
一言以蔽之,“修改時複製”機制就是一種惰性複製機制,可以幫助我們在運算過程中自動避免很多不必要的數據複製操作,下面我們來看一些例子:
在默認情況下,如果我們像下面這樣將df
的field1
列直接賦值給了field1
,再對field1
中的值進行修改,就會導致原先的df
中的對應值也被修改了,這種機制本意是避免賦值時頻繁的數據複製佔用內存,但很容易讓我們不小心篡改了原始數據:
而“修改時複製”機制,則會在頻繁複制數據,和避免篡改數據之間進行兼顧(當前版本需要設置全局參數mode.copy_on_write
爲True
以啓用):
也就是說,新版pandas
中的“修改時複製”機制,會自動檢測從源數據中衍生出的數據自身是否發生了值修改,並在修改時才進行數據複製操作,保證了分析過程的高效性和穩定性😋。
除了上述介紹的內容外,新版pandas
還進行了大量的性能優化更新,這些更新無需我們改變過去的pandas
寫法,而是在我們的日常使用過程中”潤物細無聲“地幫我們節省了計算開銷,可以說,作爲pandas
老用戶,切換到2.0
版本的過程是無痛且絲滑的😀,大家可以放心地進行更新,更多更新內容細節請移步https://pandas.pydata.org/docs/whatsnew/v2.0.0.html
。
以上就是本文的全部內容,歡迎在評論區與我進行討論~