我想这个问题需要对 concat 的实现有一些了解。
比如说,我有30个文件,每个1G,我最多只能使用32G内存。我将文件加载到名为“list_of_pieces”的 DataFrame 列表中。这个 list_of_pieces 的大小应该是 ~ 30G,对吧?
如果我执行 pd.concat(list_of_pieces)
,concat 是否会在堆中分配另一个 30G(或者可能是 10G 15G)并执行一些操作,或者它在没有的情况下“就地”运行连接分配新内存?
有人知道吗?
谢谢!
最佳答案
答案是否定的,这不是就地操作; 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#
关于python - Pandas concat 是就地函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16982936/