gpt4 book ai didi

python - Pandas HDFStore 从内存中卸载数据帧

转载 作者:太空狗 更新时间:2023-10-30 01:29:28 27 4
gpt4 key购买 nike

好的,我正在尝试使用 pandas 将大约 30GB 的 csv 文件加载到 HDFStore 中,其中包含 4000 万多行和 150 多列。大多数列是字符串,然后是数字和日期。

我之前从未真正使用过 numpy、pandas 或 pytables,但曾在 R 中使用过数据帧。

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

f=HDFStore('myfile.h5')
g=f['df']

然后我删除包含 DataFrame 的变量:

del g

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

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

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

数据的组织方式,我可能会将数据分成单个表,最大表大小约为 1GB,可以放入内存,然后一次使用一个表。但是,如果我无法清除内存,这种方法将不起作用。

关于如何实现这一点有什么想法吗?

最佳答案

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

简答

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

示例

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

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() 之后清理内存:

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) 我读到过,选择一张 table 可能会占用 table 六边形的 3 倍,(4) 商店还在那里

最后,我还尝试在打开时执行 df 的 .copy() (df = store.select('df'))。 不要这样做,它会在内存中创建一个之后无法进行垃圾回收的怪物。

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

关于python - Pandas HDFStore 从内存中卸载数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18201042/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com