我有一个TimeSeries数据对象,我每200ms追加最坏情况的数据。 现在,这非常非常重要,因为我知道它必须再次重新创建底层数据结构,它似乎并没有清理旧对象。 我试过像
这样的东西old = mydata
mydata = mydata.append(...)
del old
完全没有任何区别!
问题是我的进程可以在只有1GB内存和这种处理的主机上运行 很快就耗尽了主机内存。
我需要在内存中至少保留最近30小时的数据,因为分析每200毫秒/每个滴答进行一次。
任何优化内存的建议 - 仍然保留pandas.TimeSeries功能(基于时间间隔切片)。
答案 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