0

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

我有一个 TimeSeries 数据对象,我每 200 毫秒将数据附加到最坏情况。现在,这是非常非常重的内存,因为我知道它必须再次重新创建底层数据结构,而且它似乎没有清理旧对象。我尝试了类似的东西

old = mydata 
mydata = mydata.append(...)
del old

这根本没有任何区别!

问题是我的进程在只有 1GB 内存的主机上工作,这种处理很快就会耗尽主机内存。

我需要将至少最后 30 小时的数据保存在内存中,因为每 200 毫秒/每个刻度执行一次分析。

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

4

1 回答 1

0

一个append操作返回一个新的系列。因此,您每次都在复制数据,这是非常低效的(从速度和内存的角度来看)。处理这个问题的常用方法是预先创建一个比需要更大的大小,然后简单地填写值。如果需要,定期调整大小。(这也是 python 列表/字典的方式)。

我在这里举一个例子,以及一种使用方法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
于 2015-01-06T00:21:23.427 回答