處理大型資料集而不會耗盡記憶體的方式推薦

banq發表於2022-02-23

使用pandas的最大問題之一是大型資料集的解析器需要很長時間才能讀取資料。也許這裡有一些很酷的提示可以提供幫助!

如果缺少 CPU,您的程式執行速度較慢;如果缺少記憶體,您的程式會崩潰。

但是您可以在 Python 中處理大於 RAM 的資料集,正如您將在以下系列文章中學習的那樣。

 

程式碼結構

  1. 複製資料很浪費,修改資料很危險複製資料會浪費記憶體,修改/修改資料會導致錯誤。瞭解如何在 Python 中實現兩者之間的折衷:隱藏的可變性。
  2. 緊貼記憶體:Python 函式呼叫如何增加記憶體使用Python 將自動釋放未使用的物件。有時函式呼叫會意外地將物件保留在記憶體中;瞭解原因,以及如何解決它。
  3. 巨大的記憶體開銷:Python 中的數字以及 NumPy 如何提供幫助在 Python 中儲存整數或浮點數會產生巨大的記憶體開銷。瞭解原因以及 NumPy 如何讓事情變得更好。
  4. 物件過多:減少 Python 例項的記憶體開銷 Python 中的物件有很大的記憶體開銷。瞭解原因以及如何處理:避免使用 dicts、更少的物件等等。

 

資料管理技術

  1. 估計和建模資料處理的記憶體需求瞭解如何根據輸入大小測量和建模 Python 資料處理批處理作業的記憶體使用情況。
  2. 當您的資料不適合記憶體時:基本技術您可以使用四種基本技術來處理不適合記憶體的資料:花錢、壓縮、分塊和索引。

 

Pandas

  1. 測量 Pandas DataFrame 的記憶體使用情況瞭解如何準確測量 Pandas DataFrame 或 Series 的記憶體使用情況。
  2. 減少 Pandas 記憶體使用 #1:無失真壓縮使用更少的記憶體將大型 CSV 或其他資料載入到 Pandas 中,使用刪除列、較小的數字 dtypes、分類和稀疏列等技術。
  3. 減少 Pandas 記憶體使用 #2:有失真壓縮通過刪除不那麼重要的細節或資料來減少 Pandas 記憶體使用。
  4. 減少 Pandas 記憶體使用 #3:分塊讀取通過載入然後分塊處理檔案來減少 Pandas 記憶體使用,而不是一次全部處理。
  5. 使用 Pandas 和 SQLite 的大型資料集的快速子集您有大量資料,並且您只想將部分資料作為 Pandas 資料幀載入到記憶體中。一種簡單的方法:通過 SQLite 資料庫進行索引。
  6. 將 SQL 資料載入到 Pandas 中而不會耗盡記憶體Pandas 可以從 SQL 查詢中載入資料,但結果可能會佔用太多記憶體。瞭解如何批量處理資料,並進一步減少記憶體使用量。
  7. 使用 Pandas 1.3 的新字串 dtype 節省記憶體 在 Pandas中儲存字串會佔用大量記憶體,但使用 Pandas 1.3,您可以獲得更新、更高效的選項。
  8. 從分塊到並行:使用 Dask 更快的 Pandas瞭解 Dask 如何通過並行化加速 Pandas 資料處理,並通過透明分塊減少記憶體使用。

 

NumPy

  1. 通過無失真壓縮減少 NumPy 記憶體使用量 通過選擇較小的 dtype 和使用稀疏陣列來減少 NumPy 記憶體使用量。
  2. NumPy 檢視:節省記憶體、洩漏記憶體和細微的錯誤NumPy 透明地使用記憶體檢視作為節省記憶體的一種方式。但是你需要了解它們是如何工作的,這樣你就不會洩漏記憶體,或者錯誤地修改資料。
  3. 從磁碟載入 NumPy 陣列:mmap() 與 Zarr/HDF5如果您的 NumPy 陣列大於記憶體,您可以使用 mmap() 或非常相似的 Zarr 和 HDF5 檔案格式從磁碟透明地載入它。
  4. mmap() 寫入時複製技巧:減少陣列副本的記憶體使用 複製 NumPy 陣列並修改它會使記憶體使用加倍。但是通過使用作業系統的 mmap() 呼叫,您只需為修改的內容付費。

 

測量記憶體使用情況

  1. 在 Python 中測量記憶體使用情況:這很棘手!測量 Python 程式的記憶體使用情況並不像您想象的那麼簡單。學習兩種技術,以及它們之間的權衡。
  2. Fil:面向資料科學家和科學家的新 Python 記憶體分析器Fil 是一個 Python 記憶體分析器,專為滿足執行資料處理管道的資料科學家和科學家的需求而設計。
  3. 使用 Fil 分析器除錯 Python 記憶體不足崩潰 除錯 Python 記憶體不足崩潰可能很棘手。瞭解 Fil 記憶體分析器如何幫助您找到記憶體使用情況。
  4. 死亡,快和慢:Python 中的記憶體不足崩潰 Python 記憶體不足問題可以通過多種方式表現出來:由於交換導致的緩慢、崩潰、MemoryError、segfaults、kill -9。
  5. 使用 Fil 分析器除錯 Python 伺服器記憶體洩漏當您的 Python 伺服器發生記憶體洩漏時,Fil 記憶體分析器可以幫助您發現錯誤程式碼。

相關文章