教你如何將Pandas迭代速度加快150倍?

2021-01-11 讀芯術

全文共1455字,預計學習時長5分鐘

來源:Pexels

面對現實吧,Python的速度在與C語言或Go語言相比時,的確引發了不少口水戰。

這讓筆者一段時間以來,一直對Python快速處理任務的能力有所懷疑。

目前,筆者嘗試在Go語言中進行數據科學研究——這是有可能的——但操作起來根本不像在Python中那樣令人愉快,多半是由於語言的靜態特性和數據科學大多是探索性領域。

並不是說用Go語言重寫完成的解決方案不能提高性能,但這是另一篇文章的主題。

迄今為止,筆者至少忽略了Python可以更快地處理任務這一能力。筆者一直飽受目光短淺之苦——這是一種表現為當你只看到一種解決方案時,完全忽視其他方案的存在的症候群。相信出現這種情況的不只筆者自己。

這就是筆者今天想簡要介紹如何令Pandas每日工作速度更快且更為愉悅的原因。更準確地說,該示例將關注行之間的迭代,並在過程中執行一些數據操作。因此,事不宜遲,一起進入正題。

來源:Pexels

做一個數據集

把觀點論述清楚最簡單的方法是聲明一個單列數據框對象,其整數值範圍為1到100000:

真的不需要任何更為複雜的東西來解決Pandas的速度問題。為驗證一切進展順利,以下是數據集的前幾行和整體形狀:

好了,準備工作已做足,現在一起看看如何遍歷以及如何不遍歷數據框的行。首先介紹如何不進行選擇。

以下是你不應該做的事

啊,筆者一直在使用(和過度使用)如此多的iterrows()方法。它在默認情況下速度很慢,但你知道筆者費心去尋找替代方案的原因(目光短淺)。

為證明你不該使用iterrows()方法在數據框中進行遍歷,筆者會做個快速演示——聲明一個變量並將其初始設置為0——然後在每次迭代時按Values屬性的當前值進行遞增。

如果你想知道%%time魔法函數返回單元格完成所有操作所需的秒數/毫秒數。

一起看看該函數是如何運行的:

你現在可能會想,用15秒遍歷100000行並遞增一些外部變量的值並不算多。但事實上是——請看下一部分的闡述原因。

以下是你應該做的事

現在有一個神奇的方法能進行挽救——itertuples()。顧名思義,itertuples()循環遍歷數據框的行,然後返回一個命名元組。這就是不能用括號[]訪問這些值,而是需要使用.符號的原因。

現在將演示與幾分鐘前相同的示例,但使用的是itertuples()方法:

瞧瞧!使用itertuples()進行同樣的運算,速度快了約154倍!現在想像一下你的日常工作場景,你正在處理上百萬條行——itertuples()可以幫你節省大量時間。

來源:Pexels

在這個簡單的例子中,我們已經見識到對代碼進行的小小改動就能對整體結果產生的巨大影響。

這不意味itertuples()在每個場景下都會比iterrows()快150倍,但在某種程度上這確實意味著每次都會快一些。

感謝閱讀,希望大家有所收穫!

留言點讚關注

我們一起分享AI學習與發展的乾貨

如轉載,請後臺留言,遵守轉載規範

相關焦點

  • 數據處理必看:如何讓你的 pandas 循環加快 71803 倍
    如你所見,這個循環非常慢,需要 207 秒才能執行。讓我們看看如何提高效率。pandas 內置函數:iterrow()——快 321 倍在第一個示例中,我們循環訪問了整個數據幀。iterrows()為每行返回一個序列,因此它以一對索引的形式在數據幀上迭代,而感興趣的列以序列的形式迭代。
  • 用這幾個方法提高pandas運行速度
    本篇將要介紹幾種pandas中常用到的方法,對於這些方法使用存在哪些需要注意的問題,以及如何對它們進行速度提升。將datetime數據與時間序列一起使用的優點進行批量計算的最有效途徑通過HDFStore存儲數據節省時間▍使用Datetime數據節省時間我們來看一個例子。
  • pandas100個騷操作:再見 for 循環!速度提升315倍!
    本篇是pandas100個騷操作系列的第 11 篇:再見 for 循環!速度提升315倍!系列內容,請看👉「pandas100個騷操作」話題,訂閱後文章更新可第一時間推送至訂閱號。for是所有程式語言的基礎語法,初學者為了快速實現功能,依懶性較強。
  • 還在抱怨pandas運行速度慢?這幾個方法會顛覆你的看法
    本篇將要介紹幾種pandas中常用到的方法,對於這些方法使用存在哪些需要注意的問題,以及如何對它們進行速度提升。將datetime數據與時間序列一起使用的優點進行批量計算的最有效途徑通過HDFStore存儲數據節省時間>>> import pandas as pd>>> pd.
  • 還在抱怨Pandas運行速度慢?這幾個方法會顛覆你的看法
    本篇將要介紹幾種pandas中常用到的方法,對於這些方法使用存在哪些需要注意的問題,以及如何對它們進行速度提升。將datetime數據與時間序列一起使用的優點進行批量計算的最有效途徑通過HDFStore存儲數據節省時間▍使用Datetime數據節省時間我們來看一個例子。
  • 懶人秘籍:教你如何避免編寫pandas代碼
    而大家都在儘可能地避免這種懸崖峭壁,結果可想而知,都轉向了如何避免編寫pandas代碼。在過去4年裡,筆者一直使用pandas作為數據分析的主要工具。必須承認,「如何避免編寫pandas代碼」的大部分內容來自於使用pandas編程的起步階段。在進行代碼審閱時,筆者仍然看到許多經驗豐富的程式設計師在看一些熱門「如何避免使用」的帖子。
  • pandas100個騷操作:使用 Datetime 提速 50 倍運行速度!
    提速 50 倍運行速度!平時我們運行pandas少不了和時間打交道,而大多情況下許多朋友都是暴力解決問題,直接讓pandas自己轉換和處理。對於平時的學習和小測試是沒什麼問題的,但當跑一些大數據的時候往往會非常的慢,而這個時間性能其實是完全可以優化的。本次東哥介紹一個非常簡單的操作,使用Datetime變換時間類型,讓你的代碼運行速度飛速提升。
  • 如何提高PCB原型迭代速度
    打開APP 如何提高PCB原型迭代速度 上海韜放電子 發表於 2020-12-14 12:47:10 一旦準備好進行生產,就需要進行設計審查並糾正DFM問題,這將花費自己的時間。隨著產品開發進度的加快和產品生命周期的縮短,在不犧牲成本或質量的前提下,增加PCB原型迭代速度的壓力就越來越大。 那麼,PCB設計團隊如何在不犧牲質量或冒原型開發失敗的風險的情況下保持其開發進度正常?對於任何項目,都有一系列重要的管理任務和輔助設計任務,但是它們只是在開發過程中佔用了太多時間。
  • Pandas常見的性能優化方法
    但Pandas在使用上有一些技巧和需要注意的地方,如果你沒有合適的使用,那麼Pandas可能運行速度非常慢。本文將整理一些Pandas使用技巧,主要是用來節約內存和提高代碼速度。1 數據讀取與存取在Pandas中內置了眾多的數據讀取函數,可以讀取眾多的數據格式,最常見的就是read_csv函數從csv文件讀取數據了。
  • 如何將數據處理速度提升1000+倍
    但是如果不能有效利用pandas和numpy中的各種函數和方法,反而會降低數據處理的效率。以下就以PyGotham 2019的一個演講介紹如何大幅提升數據處理的速度。notebook和數據見文末連結,代碼較多,建議下載notebook和數據測試。
  • 如何在Python中編寫簡單代碼,並且速度超越Spark?
    數據科學家們用pandas進行探索。然後,其他的數據工程師團隊重新編寫相同的邏輯代碼並使其大規模工作,或者使用Spark令其與實時流一同工作。當數據科學家需要更改邏輯或將一個不同的數據集用於他/她的模型時,則會進行一次次地迭代。
  • 如何通過一頓飯來說明NumPy與pandas的功用
    縱然NumPy與pandas風靡於數據分析任務,人們對其的不足也多有指出,其中最主要的便是由於Python自身的動態語言特性而帶來的運行速度方面的損失,其次便是Python在大數據處理方面(數G甚至幾十上百G)的捉襟見肘。
  • 一行代碼讓你的Pandas加速4倍
    這對於較小的數據集工作得很好,因為你可能不會注意到速度上的差異。但是,隨著數據集越來越大,計算量越來越大,如果只使用單個 cpu 核,速度會受到很大的影響。它在數據集上同一時間只能計算一次,但該數據集可以有數百萬甚至數十億行。然而,大多數用於數據科學的現代機器都有至少 2 個 CPU 核。
  • 電腦技能 教你加快電腦運行速度
    魯迅說過:「世上本沒有路,走的人多了就成了路」。「本來我是不想管你們電腦運行快不快的,問我的學生多了,我也就管了」。再後來,我發現很多學生的電腦基本上都很卡,但問題基本上都差不多,這裡,我簡單寫個教程,教一些剛剛接觸電腦的「小白」一些電腦最基本的優化步驟。首先講明,由於win7內核的問題,win7的開關機速度是無法趕上win8的。
  • 教程 | 簡單實用的pandas技巧:如何將內存佔用降低90%
    數據科學博客 Dataquest.io 發布了一篇關於如何優化 pandas 內存佔用的教程:僅需進行簡單的數據類型轉換,就能夠將一個棒球比賽數據集的內存佔用減少了近 90%,機器之心對本教程進行了編譯介紹。當使用 pandas 操作小規模數據(低於 100 MB)時,性能一般不是問題。
  • 科技:你的iPhone運行速度開始變慢了?教你如何加快手機速度
    幸運的是,如果你的iPhone似乎比它應該的要慢,你可以做很多事情來測試它的性能,如果你注意到一個問題,提高你的iPhone的速度。讓我們來了解你的iPhone運行速度變慢的原因,以及如何加快速度。首先要做的事情是:在你真正採取任何措施加速之前,你可能想看看iPhone的速度有多快。幸運的是,您可以使用各種速度測試應用程式來檢查自己設備的性能。
  • 僅需添加一行代碼,即可讓Pandas加速四倍 | Pandas on Ray
    但其速度優勢並不明顯。新的Modin庫,通過自動將計算分攤至系統所有可用的CPU,從而加速pandas處理效率。因此,Modin據說能夠使任意大小的Pandas DataFrames擁有和CPU內核數量同步的線性增長。在Pandas中,給定DataFrame,目標是儘可能以最快速度來進行數據處理。
  • 八月教培行業現狀:暑假招生失利,收入銳減,關門速度加快
    每年暑假,大都是教培行業機構招生和營收的「黃金檔期」,不但可以有大量生源,還可以擁有眾多續報和秋季開班學員,可謂是重要的時間節點!第三,關門速度加快,很多人明顯感覺到整個教培行業在下行,雖然前景是美好的,可是現實的壓力讓眾多的機構不堪重負,關門速度加快
  • Pandas的crosstab函數
    它教給新手非常棒的圖表和方法。但說到熱圖,課程的老師不知怎麼地引入了一個全新的pandas函數crosstab。然後,很快說:「crosstab是一個計算交叉表的有用函數…」我就在那裡不理解了。顯然,我的第一反應是查看函數的文檔。我剛開始覺得我可以處理Matplotlib的任何文檔,但是…我錯了。.
  • 一行代碼讓你的pandas運行得更快
    在一臺 8 核的機器上,用戶只需要修改一行代碼,Modin 就能將 Pandas 查詢任務加速 4 倍。該系統是為希望程序運行得更快、伸縮性更好,而無需進行重大代碼更改的 Pandas 用戶設計的。這項工作的最終目標是能夠在雲環境中使用 Pandas。