python - Pandas 数据框的最大大小

标签 python pandas

我正在尝试使用 pandaread_csvread_stata 函数读取一个较大的数据集,但我一直遇到 内存错误s。数据框的最大大小是多少?我的理解是,只要数据适合内存,数据框就应该没问题,这对我来说应该不是问题。还有什么可能导致内存错误?

关于上下文,我正在尝试阅读 Survey of Consumer Finances 2007 , ASCII 格式(使用 read_csv)和 Stata 格式(使用 read_stata)。该文件大约 200MB 作为 dta,大约 1.2GB 作为 ASCII,在 Stata 中打开它告诉我有 5,800 个变量/列,用于 22,000 个观察/行。

最佳答案

我将按照评论中的讨论发布此答案。我已经看到它出现了很多次,但没有一个公认的答案。

内存错误很直观 - 内存不足。但有时这个错误的解决方案或调试令人沮丧,因为你有足够的内存,但错误仍然存​​在。

1) 检查代码错误

这可能是一个“愚蠢的步骤”,但这就是为什么它是第一步。确保没有无限循环或故意花费很长时间的事情(例如使用 os 模块来搜索整个计算机并将输出放入 excel 文件中)

2) 让您的代码更高效

按照步骤 1 进行。但如果简单的事情需要很长时间,通常会有一个模块或更好的方法来做一些更快、更高效的事情。这就是 Python 和/或开源语言的美妙之处!

3) 检查对象的总内存

第一步是检查一个对象的内存。 Stack上有很多关于这个的线程,所以你可以搜索它们。热门答案是 herehere

你总是可以使用 sys.getsizeof() 来计算对象的大小。 :

import sys
print(sys.getsizeof(OBEJCT_NAME_HERE))

现在错误可能在创建任何内容之前发生,但如果您以 block 的形式读取 csv,您可以看到每个 block 使用了多少内存。

4) 运行时检查内存

有时您有足够的内存,但您正在运行的函数在运行时会消耗大量内存。这会导致内存超出已完成对象的实际大小,从而导致代码/进程出错。实时检查内存很长,但可以做到。 Ipython 很好。查看 Their Document .

使用下面的代码直接在 Jupyter Notebook 中查看文档:

%mprun?
%memit?

使用示例:

%load_ext memory_profiler
def lol(x):
    return x
%memit lol(500)
#output --- peak memory: 48.31 MiB, increment: 0.00 MiB

如果您需要有关魔术函数的帮助 This is a great post

5) 这个可能是第一个....但是检查一些简单的东西,比如位版本

在你的情况下,你运行的 python 版本的简单切换解决了这个问题。

通常上述步骤可以解决我的问题。

关于python - Pandas 数据框的最大大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23569771/

相关文章:

python - 由于数据帧错误,无法绘制实时数据

python - 如何从没有索引的列中获取数据

Python - 将字典和键值列表转换为字符串

python - 使用 Pandas 对数据进行非规范化

python - 如何获取 pandas datetime64 列和 1582 年 10 月 14 日(公历)之间的时间增量(以秒为单位)?

Python/ Pandas -ValueError : Incompatible indexer with Series

python - 如何使用 to_dict() 创建一个键、值对均为整数的字典?

python - 在尊重访问控制的同时为 REST API 序列化 SQLAlchemy 模型?

python - 为什么 PyTorch 模型在模型内部采用多个图像大小?

python - 切片以更改 numpy.array 图像上的像素颜色