首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >熊猫HDFStore从内存中卸载数据

熊猫HDFStore从内存中卸载数据
EN

Stack Overflow用户
提问于 2013-08-13 05:01:14
回答 1查看 6.1K关注 0票数 6

好的,我正在实验熊猫加载一个包含40 million+行和150+列的30 in csv文件到HDFStore。大多数列是字符串,后面跟着数字和日期。

我以前从未真正使用过numpy、熊猫或pytables,但在R中玩过数据帧。

我目前只是将大约20000行的样例文件存储到HDFStore中。当我尝试从HDFStore读取表时,表被加载到内存中,内存使用量增加了~100 by

代码语言:javascript
复制
f=HDFStore('myfile.h5')
g=f['df']

然后删除包含DataFrame的变量:

代码语言:javascript
复制
del g

此时,内存使用量减少了大约5MB。

如果我再次使用g=f['df']将数据加载到g中,则内存使用量将再增加100 up。

只有当我实际关闭窗口时才会进行清理。

按照数据的组织方式,我可能会将数据划分为单个表,最大表大小在1GB左右,可以放入内存中,然后一次只使用一个表。但是,如果我不能清除内存,这种方法将无法工作。

对我如何做到这一点有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2015-04-23 09:36:03

关于OP问题的第二点(“如何释放内存”)的回答

短答案

关闭存储并删除所选的数据call不起作用,但是我发现在删除数据后,对gc.collect()的调用很好地清除了内存。

示例

在下面的示例中,内存按预期自动清除:

代码语言:javascript
复制
data=numpy.random.rand(10000,1000)         # memory up by 78MB
df=pandas.DataFrame(data)                  # memory up by 1 MB

store = pandas.HDFStore('test.h5')         # memory up by 3 MB
store.append('df', df)                     # memory up by 9 MB (why?!?!)

del data                                   # no change in memory
del df                                     # memory down by 78 MB

store.close()                              # no change in memory
gc.collect()                               # no change in memory (1) 

(1)商店虽已关闭,但仍在内存中

现在,假设我们从上面继续,然后按照下面的步骤重新打开store。只有在调用了 gc.collect()之后,才会清除内存:

代码语言:javascript
复制
store = pandas.HDFStore('test.h5')         # no change in memory (2) 
df = store.select('df')                    # memory up by 158MB ?! (3)
del df                                     # no change in memory
store.close()                              # no change in memory
gc.collect()                               # memory down by 158 MB (4)

(2)商店从来没有离开过,(3)我曾读过一张桌子的选择占表的6倍之多,(4)商店还在那里。

最后,我还尝试做了一个.copy()的df (df = store.select('df'))。不允许这样做,它会在内存中创建一个无法在之后被垃圾收集的怪物。

最后一个问题如果内存中的DF是100 an,我知道它在加载时可能占用内存的2-3倍,但是为什么在从HDFStore中选择并关闭存储后,它在内存中保持在200 an?

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18201042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档