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