16

我想这个问题需要对 concat 的实现有所了解。

比如说,我有 30 个文件,每个 1G,我最多只能使用 32G 内存。我将文件加载到名为“list_of_pieces”的 DataFrame 列表中。这个 list_of_pieces 的大小应该是 ~ 30G,对吧?

如果我执行“pd.concat(list_of_pieces)”,concat 是否会在堆中分配另一个 30G(或 10G 15G)并执行一些操作,或者它在不分配新内存的情况下“就地”运行连接?

有人知道吗?

谢谢!

4

1 回答 1

15

答案是否定的,这不是就地操作;np.concatenate 在后台使用,请参见此处:Concatenate Numpy arrays without copying

解决该问题的更好方法是将这些部分中的每一个写入一个HDFStore表,请参见此处: http: //pandas.pydata.org/pandas-docs/dev/io.html#hdf5-pytables用于文档,此处: http ://pandas.pydata.org/pandas-docs/dev/cookbook.html#hdfstore获取一些食谱。

然后您可以根据需要选择任何部分(甚至整个集合)(通过查询甚至行号)

当数据在磁盘上时,甚至可以完成某些类型的操作:https ://github.com/pydata/pandas/issues/3202?source=cc ,这里: http: //pytables.github.io/usersguide /libref/expr_class.html#

于 2013-06-07T14:37:11.713 回答