Pandas 中的記憶體錯誤

Preet Sanghavi 2023年1月30日
  1. 什麼是 Pandas 的記憶體錯誤
  2. 如何避免 Pandas 中的記憶體錯誤
Pandas 中的記憶體錯誤

本教程探討了 Pandas 中記憶體錯誤的概念。

什麼是 Pandas 的記憶體錯誤

在使用 Pandas 時,分析師可能會遇到程式碼直譯器丟擲的多個錯誤。這些錯誤範圍很廣,可以幫助我們更好地調查問題。

在本教程中,我們旨在更好地瞭解 Pandas 引發的記憶體錯誤、引發該錯誤的原因以及解決該錯誤的潛在方法。

首先,讓我們瞭解這個錯誤的含義。記憶體錯誤意味著你嘗試訪問的伺服器或資料庫上沒有足夠的記憶體來完成你希望執行的操作或任務。

此錯誤通常與數百 GB 的檔案和 CSV 資料相關。瞭解導致此錯誤的原因並避免此類錯誤以擁有更多資料儲存非常重要。

解決此錯誤還可以幫助開發具有適當規則管理的高效和徹底的資料庫。

假設我們試圖從一個包含超過 1000 GB 資料的 CSV 檔案中獲取資料,我們自然會遇到上面討論的記憶體錯誤。這個錯誤可以在下面說明。

MemoryError
Press any key to continue . . .

有一種方法可以潛在地避免這種記憶體錯誤。但是,在我們這樣做之前,讓我們建立一個虛擬 DataFrame 來使用。

我們將此 DataFrame 稱為 dat1。讓我們使用以下程式碼建立此 DataFrame。

import pandas as pd

dat1 = pd.DataFrame(pd.np.random.choice(["1.0", "0.6666667", "150000.1"], (100000, 10)))

該查詢建立從 0 到 9 索引的 10 列和 100000 個值。要檢視資料中的條目,我們使用以下程式碼。

print(dat1)

上面的程式碼給出了以下輸出。

               0          1          2  ...          7          8          9
0            1.0        1.0        1.0  ...   150000.1  0.6666667  0.6666667
1      0.6666667  0.6666667        1.0  ...  0.6666667   150000.1  0.6666667
2            1.0        1.0   150000.1  ...   150000.1        1.0   150000.1
3       150000.1  0.6666667  0.6666667  ...        1.0   150000.1        1.0
4       150000.1  0.6666667   150000.1  ...   150000.1  0.6666667  0.6666667
...          ...        ...        ...  ...        ...        ...        ...
99995   150000.1   150000.1        1.0  ...   150000.1        1.0  0.6666667
99996        1.0        1.0   150000.1  ...  0.6666667  0.6666667   150000.1
99997   150000.1   150000.1        1.0  ...  0.6666667   150000.1  0.6666667
99998        1.0  0.6666667  0.6666667  ...  0.6666667        1.0   150000.1
99999        1.0  0.6666667   150000.1  ...        1.0   150000.1        1.0

[100000 rows x 10 columns]

如何避免 Pandas 中的記憶體錯誤

現在讓我們使用以下程式碼檢視此 DataFrame 佔用的總空間。

resource.getrusage(resource.RUSAGE_SELF).ru_maxrss

程式碼給出以下輸出。

# 224544 (~224 MB)

為了避免在單個 DataFrame 上花費太多空間,讓我們通過準確指定我們正在處理的資料型別來做到這一點。

這有助於我們減少所需的總記憶體,因為需要更少的空間來理解資料型別,並且可以將更多空間分配給正在考慮的實際資料。

我們可以使用以下查詢來做到這一點。

df = pd.DataFrame(pd.np.random.choice([1.0, 0.6666667, 150000.1], (100000, 10)))
resource.getrusage(resource.RUSAGE_SELF).ru_maxrss

程式碼的輸出如下。

# 79560 (~79 MB)

由於我們在這裡通過不分配字串將資料型別指定為 int,因此我們成功地減少了資料所需的記憶體空間。

因此,我們通過本教程瞭解了關於 Pandas 中丟擲的記憶體錯誤的含義、原因和潛在的解決方案。

作者: Preet Sanghavi
Preet Sanghavi avatar Preet Sanghavi avatar

Preet writes his thoughts about programming in a simplified manner to help others learn better. With thorough research, his articles offer descriptive and easy to understand solutions.

LinkedIn GitHub

相關文章 - Pandas Error