Pandas 调用函数时的内存、大数据、HDF表和内存使用情况 简短问题

Pandas 调用函数时的内存、大数据、HDF表和内存使用情况 简短问题,pandas,memory,hdf5,large-data,Pandas,Memory,Hdf5,Large Data,当Pandas在HDFStore(例如:.mean()或.apply())上工作时,它是以数据帧的形式加载内存中的完整数据,还是以序列的形式逐个记录进行处理 长描述 我必须处理大型数据文件,我可以指定数据文件的输出格式 我打算使用Pandas来处理数据,并且我希望设置最佳格式,以便最大限度地提高性能 我已经看到panda.read_table()已经走了很长一段路,但它至少需要与我们要读取的原始文件大小相同的内存(实际上至少是内存的两倍)才能转换为数据帧。这可能适用于高达1 GB但高于1 GB的

当Pandas在HDFStore(例如:.mean()或.apply())上工作时,它是以数据帧的形式加载内存中的完整数据,还是以序列的形式逐个记录进行处理

长描述 我必须处理大型数据文件,我可以指定数据文件的输出格式

我打算使用Pandas来处理数据,并且我希望设置最佳格式,以便最大限度地提高性能

我已经看到panda.read_table()已经走了很长一段路,但它至少需要与我们要读取的原始文件大小相同的内存(实际上至少是内存的两倍)才能转换为数据帧。这可能适用于高达1 GB但高于1 GB的文件?这可能很难,尤其是在在线共享机器上

然而,我已经看到,现在Pandas似乎使用pytables支持HDF表

我的问题是:当我们对整个HDF表执行操作时,熊猫如何管理内存?例如.mean()或.apply()。它是先在数据帧中加载整个表,还是直接从HDF文件中处理函数而不存储在内存中


附带问题:hdf5格式光盘的使用情况如何?我的意思是,它是像xml一样冗长,还是更像JSON?(我知道有索引之类的东西,但我对数据的简单描述很感兴趣)

我想我已经找到了答案:是和否,这取决于如何加载数据帧

与read_table()方法一样,您有一个“迭代器”参数,该参数允许获取一个生成器对象,该对象一次只能获取一条记录,如下所述:

现在,我不知道像.mean()和.apply()这样的函数如何使用这些生成器

如果有人有更多信息/经验,请随意分享

关于HDF5开销:

HDF5在内存中保留一个B树,用于映射上的块结构 磁盘。为数据集分配的块越多,数据集越大 B-树。大型B树占用内存并导致文件存储开销 以及更多的磁盘I/O和更高的元数据缓存争用。 因此,在内存和I/O之间保持平衡是很重要的 开销(小B树)和访问数据的时间(大B树)


为了回答我的附带问题,似乎使用HDF5确实存在开销,我无法量化它,但如果数据足够大,使用压缩可以获得比1:1更好的比率,因此它比仅使用CSV文件要好(因为HDF5支持动态压缩)。请参阅查找更多信息以量化HDF5文件存储开销:当引用存储在HDF文件中的pandas对象时,它会立即收回整个结构。使用
存储时,迭代器和chunksize选项可用。请选择
,但您必须自己管理聚合。在计算平均值时,这是非常简单的。