Pandas可扩展的数据结构 - 最小化内存消耗

时间:2015-01-05 10:38:10

标签: python python-2.7 pandas memory-optimization

对许多人来说,这似乎是一个重复的问题,但我找不到满意的答案。

我有一个TimeSeries数据对象,我每200ms追加最坏情况的数据。 现在,这非常非常重要,因为我知道它必须再次重新创建底层数据结构,它似乎并没有清理旧对象。 我试过像

这样的东西
old = mydata 
mydata = mydata.append(...)
del old

完全没有任何区别!

问题是我的进程可以在只有1GB内存和这种处理的主机上运行 很快就耗尽了主机内存。

我需要在内存中至少保留最近30小时的数据,因为分析每200毫秒/每个滴答进行一次。

任何优化内存的建议 - 仍然保留pandas.TimeSeries功能(基于时间间隔切片)。

1 个答案:

答案 0 :(得分:0)

append操作会返回一个新系列。因此,每次复制数据都是非常低效的(从速度和内存的角度来看)。处理此问题的常用方法是预先创建比所需更大的尺寸,然后只需填写值即可。如果需要,可以定期调整大小。 (这就是python lists / dict的做法)。

我举了一个示例here,以及使用HDFStore执行此操作的方法。

In [7]: df = DataFrame(index=range(5),columns=list('AB'))

In [8]: df.iloc[0] = Series(dict(A = 10, B = 5))

In [9]: df.iloc[1] = Series(dict(A = 11, B = 6))

In [10]: def f(x,indexer):
   ....:     return x.iloc[0:indexer]*2
   ....: 

In [11]: f(df,2)
Out[11]: 
    A   B
0  20  10
1  22  12

In [12]: df.iloc[2] = Series(dict(A = 12, B = 7))

In [13]: f(df,3)
Out[13]: 
    A   B
0  20  10
1  22  12
2  24  14