簡體   English   中英

熊貓可擴展數據結構-最大限度地減少內存消耗

[英]Pandas expandable data structure - minimize memory consumption

對於許多人來說,這似乎是一個重復的問題,但是我找不到令人滿意的答案。

我有一個TimeSeries數據對象,每200毫秒向其添加一次數據最壞情況。 現在,這非常占用大量內存,因為據我了解,它必須再次重新創建基礎數據結構,而且似乎並沒有清除舊對象。 我嘗試了類似的東西

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

根本沒有任何區別!

問題是我的進程只能在只有1GB內存的主機上運行,​​而這種處理會很快耗盡主機內存。

我需要將至少最近30個小時的數據保留在內存中,因為每200毫秒/每個周期執行一次分析。

關於優化內存的任何建議-仍保留pandas.TimeSeries功能(基於時間間隔進行切片)。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM