日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

pandas库+3个小技巧=内存占用小、读取时间少?

發布時間:2023/12/29 综合教程 20 生活家
生活随笔 收集整理的這篇文章主要介紹了 pandas库+3个小技巧=内存占用小、读取时间少? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

點擊上方關注,All in AI中國

Pandas已經成為最受歡迎的數據科學庫之一。它易于使用,文檔非常棒,而且功能強大。

然而,無論使用哪一個庫,大型的數據集總是會帶來額外的挑戰,這些是需要謹慎處理的。

你一開始遇到硬件障礙,是因為您沒有足夠的內存來保存所有數據。尤其是遇到企業公司存儲的數據集最多可達到100GB或甚至1000的GB的情況。

即使你確實是購買了足夠內存來存儲所有數據的計算機,將其讀入內存中的速度也會非常慢。

但是Pandas庫將再次幫助我們。本文將討論三種技巧,你可以使用它們來減少大數據集的內存占用和讀取時間。我已經嘗試將這些技術用于超過100GB大小的數據集,并將它們壓縮到只有64 GB甚至32GB RAM的機器上。

下面讓我們來看看吧!

整理你的數據

CSV格式是一種非常方便的數據存儲方式,易于編寫且人們可讀。 另外,有一個很好的pandas函數read_csv()用于加載存儲為CSV的數據。但是當你的CSV太大以至于內存不足時會發生什么?有一個非常簡單的Pandas技巧來處理它! 我們并不是嘗試去一次性處理我們的數據,而是將它們分成幾個部分。 通常,這些部分稱為塊。塊只是我們數據集的一部分。 我們可以根據需要去制作成大塊或小塊,這取決于我們有多少內存。

這個過程是這樣進行的:

  1. 先讀入一大塊
  2. 并處理塊
  3. 保存塊的結果
  4. 重復步驟1到3,直到得到所有塊結果
  5. 組合塊的結果

我們可以使用名為chunksize的read_csv()函數的方便變量來執行上述所有步驟。chunksize表示一次讀取多少CSV行。這當然取決于您有多少內存以及每一行有多大。

如果我們認為我們的數據像高斯分布一樣很容易處理,那么我們就可以一對一的,對每個塊執行我們想要的處理和可視化,因此不會損失太多的準確性。

如果我們的分布有點像泊松分布那樣復雜,那么最好在處理之前過濾每個塊并將所有小塊放在一起。大多數情況下,您最終會刪除許多不相關的列或刪除缺少值的行。我們可以對每個塊都這樣做,使它們更小,然后將它們放在一起,并對最終的數據文件執行數據分析。

以下的代碼執行了這些步驟。

刪除數據

有時候,我們會先知道我們想要分析數據集中的哪些列。事實上,通常情況下,有幾個或多個列是我們不關心的。

在讀取數據之前直接跳過列可以節省大量內存。pandas允許我們,而且指定我們想要讀取的列:

丟棄包含沒有用的信息的列,將是節省內存的方法之一。

我們可以做的另一件事是過濾掉任何缺失或NA值的行。這是用dropna()函數最簡單的:

有一些非常有用的變量,我們可以傳遞給dropna():

方法:

這將允許你指定"any"(如果其中任何列是NA,則刪除一行)或"all"(僅當所有列都是NA時,才刪除一行)

thresh:設置一個閾值,表示要刪除一行需要多少個NA值

subset:選擇將考慮用于檢查NA值的列子集

你可以使用這些參數,尤其是thresh和subset來真正具體了解哪些行將被刪除。

Pandas在讀取時沒有像列一樣的方法來做這個,但我們可以像上面那樣在每個塊上做到這一。

為每一列設置特定的數據類型

對于許多初學數據科學家來說,為每列設置特定數據類型數據類型,并沒有在過多考慮范圍之內。 但是一旦開始處理非常大的數據集時,處理數據類型就變得至關重要。

通常的做法是讀取dataframe,然后根據需要轉換列的數據類型。但是對于一個大的數據集,我們真的必須注意內存空間。CSV中可能有一些列,比如浮點數,它們將占用比它們需要的更多的空間。例如,如果我們下載了一個用于預測股票價格的數據集,我們的價格可能被保存為32位浮點數!

但我們真的需要32個浮點數(float)嗎?大多數情況下,股票是以小數點后兩位指定的價格買進的。即使我們想要非常精確,浮點數16也足夠了。

因此,我們不是使用列的原始數據類型讀入數據集,而是指定我們希望pandas在我們的列中使用讀取的數據類型。 這樣,我們永遠不會消耗比實際需要更多的內存。

使用read_csv()函數中的dtype參數很容易做到這一點。我們可以指定一個字典,其中每個鍵是數據集中的一列,每個值是我們希望使用該鍵的數據類型。

舉個pandas的例子:

我們的教程到此結束!希望這三個技巧能幫你節省很多時間和內存!

編譯出品

總結

以上是生活随笔為你收集整理的pandas库+3个小技巧=内存占用小、读取时间少?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。