6

简短的问题

当 Pandas 在 HDFStore 上工作时(例如: .mean() 或 .apply() ),它是将完整数据作为 DataFrame 加载到内存中,还是作为 Serie 逐记录处理?

详细描述

我要处理大型数据文件,我可以指定数据文件的输出格式。

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

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

但是,我看到现在 Pandas 似乎支持使用 pytables 的 HDF 表。

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

附带问题:hdf5 格式在磁盘使用上是否紧凑?我的意思是,它是像 xml 一样冗长还是更像 JSON?(我知道有索引和东西,但我在这里对数据的简单描述感兴趣)

4

1 回答 1

7

我想我已经找到了答案:是与否,这取决于您如何加载 Pandas DataFrame。

与 read_table() 方法一样,您有一个“迭代器”参数,它允许获取一个生成器对象,该对象一次只能获取一条记录,如下所述:http: //pandas.pydata.org/pandas-docs/开发/io.html#iterator

现在,我不知道 .mean() 和 .apply() 之类的函数如何与这些生成器一起使用。

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

关于 HDF5 开销:

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

http://pytables.github.com/usersguide/optimization.html

于 2013-03-29T00:24:49.820 回答