以表格格式使用hdf时内存泄漏?

时间:2014-12-01 12:43:53

标签: python pandas pytables

在pandas下,每次我使用表格格式而不是固定格式我的内存消耗爆炸。

import numpy as np
np.random.seed(seed=10)
df = pd.DataFrame ({'ID' : ['foo', 'bar'] * 10000000,
                'ORDER' : np.arange(20000000),
         'VAL' : np.random.randn(20000000)})

案例#1:修订格式

df.to_hdf('test.h5','df',append=False,format ='fixed')

现在,我读了十次df,我的工作没有高内存消耗

for a in range(10):
    df1 = pd.read_hdf('test.h5','df')

案例#2:表格格式

df.to_hdf('test.h5','df',append=False,format ='table')

现在,我读了10十次df,它没有释放内存上每个itération.memoryconsuption正在变高

for a in range(10):
    df1 = pd.read_hdf('test.h5','df')

有什么建议吗?

windows 64bits python 3.4,pandas 0.15.1

1 个答案:

答案 0 :(得分:1)

使用较小的文件n = 1MM。

他们的表格格式分配大约2倍的内存然后收集它。这主要是存储格式的功能。

In [12]: %mprun -f f f()
Filename: test.py

Line #    Mem usage    Increment   Line Contents
================================================
     5    115.1 MiB      0.0 MiB   def f():
     6    125.8 MiB     10.7 MiB       pd.read_hdf('test.h5','df')
     7    125.8 MiB      0.0 MiB       gc.collect()
('',)

In [13]: %mprun -f f2 f2()
Filename: test.py

Line #    Mem usage    Increment   Line Contents
================================================
     9    125.8 MiB      0.0 MiB   def f2():
    10    228.5 MiB    102.7 MiB       pd.read_hdf('test2.h5','df')
    11    115.0 MiB   -113.5 MiB       gc.collect()