【发布时间】:2013-03-19 13:10:26
【问题描述】:
小问题
当 Pandas 在 HDFStore 上工作时(例如: .mean() 或 .apply() ),它是将完整数据作为 DataFrame 加载到内存中,还是作为 Serie 逐记录处理?
详细说明
我要处理大型数据文件,我可以指定数据文件的输出格式。
我打算使用 Pandas 来处理数据,并且我想设置最佳格式以最大限度地提高性能。
我已经看到 panda.read_table() 已经走了很长一段路,但它仍然至少需要与我们想要读取以进行转换的原始文件大小一样多的内存(实际上至少是内存的两倍)进入数据框。这可能适用于最大 1 GB 的文件,但高于?这可能很难,尤其是在在线共享机器上。
但是,我看到现在 Pandas 似乎支持使用 pytables 的 HDF 表。
我的问题是:当我们对整个 HDF 表进行操作时,Pandas 是如何管理内存的?例如 .mean() 或 .apply()。它是先将整个表加载到 DataFrame 中,还是直接从 HDF 文件中处理函数而不存储在内存中?
附带问题:hdf5 格式在磁盘使用上是否紧凑?我的意思是,它是像 xml 那样冗长还是更像 JSON? (我知道有索引和东西,但我在这里对数据的简单描述感兴趣)
【问题讨论】:
-
回答我的问题,似乎使用HDF5确实有开销,我无法量化它,但如果数据足够大,使用压缩可以获得比1更好的比率: 1,因此它会比 CSV 文件更好(因为 HDF5 支持动态压缩)。见stackoverflow.com/questions/14332193/hdf5-storage-overhead
-
找到更多信息来量化 HDF5 文件存储开销:hdfgroup.org/HDF5/doc1.6/Chunking.html#S5
-
当您引用存储在 HDF 文件中的 pandas 对象时,它会立即拉回整个结构。使用
store.select时可以使用迭代器和块大小选项,但您必须自己管理聚合。这在计算平均值时非常简单。
标签: pandas memory hdf5 large-data