有效地将单行添加到Pandas Series或DataFrame

时间:2012-12-06 20:25:01

标签: python performance pandas time-series

我想使用Pandas实时处理系列。每一秒,我都需要在现有系列中添加最新的观察结果。我的系列被分组为一个DataFrame并存储在HDF5文件中。

以下是我现在的处理方式:

>> existing_series = Series([7,13,97], [0,1,2]) 
>> updated_series = existing_series.append( Series([111], [3]) )

这是最有效的方式吗?我已经阅读了无数的帖子,但找不到任何关注高频数据效率的帖子。

编辑:我刚刚读到有关模块搁置和pickle的信息。看起来他们会实现我想要做的,基本上将列表保存在磁盘上。因为我的列表很大,有没有办法不将完整列表加载到内存中,而是有效地一次添加一个值?

1 个答案:

答案 0 :(得分:2)

在0.10(即将推出)中查看新的PyTables文档,或者您可以从master获得。 http://pandas.pydata.org/pandas-docs/dev/whatsnew.html

PyTables实际上非常擅长追加,每秒写入HDFStore都会有效。您想要存储DataFrame表。然后,您可以在查询中选择数据,例如时尚,例如

store.append('df', the_latest_df)
store.append('df', the_latest_df)
....
store.select('df', [ 'index>12:00:01' ])

如果这一切都来自同一个过程,那么这将很有效。如果你有一个编写过程,然后另一个进程正在阅读,这有点棘手(但会根据你正在做的事情正常工作)。

另一种选择是使用消息传递从一个进程传输到另一个进程(然后追加到内存中),这样可以避免序列化问题。