Python中处理大型数据集而不会耗尽内存的方式推荐


使用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 内存分析器可以帮助您发现错误代码。