快速的Numpy数组结构,用于附加和创建PANDAS DataFrame



我正在尝试几个小时来提出最有效的结构方法,并将流动的滴答数据附加到共享内存numpy numpy arnay ,然后稍后获得pandas dataframe及时的方式。

#source tick data comes in as dict
tick_data = {"bid": float(1.2), "ask": float(1.3), "time": datetime.datetime.now()}

#construct np array
dtype_conf = [('bid', '<f4'), ('ask', '<f4'), ('time', 'datetime64[us]')]
new_tick = np.array([(11.11, 22.22, now)], dtype=dtype_conf)
#append / vstack / .. it to existing shared numpy array
shared_np_array = np.vstack((shared_np_array, new_tick))
#fast construction of pd.DataFrame if needed 
pd.DataFrame(shared_np_array.reshape((1,-1))[0])

问题:

1(构造我的数组的正确方法是什么?

2(创建完整数组的pd.dataframe或列的pd.series是什么最有效的方法?

3(是否有更好的方法与Python中的共享内存时间工程一起工作(除了多处理。BaseManager(?

非常感谢!

numpy不是附加 data的数据类型的好选择。

Python中最通用的选择是collections.deque,它是针对在列表的开头或结尾插入项目的优化的。

这就是您的代码外观:

import pandas as pd, numpy as np
import datetime
from collections import deque
now = datetime.datetime.now()
lst_d = deque()
#source tick data comes in as dict
tick_data = {"bid": float(1.2), "ask": float(1.3), "time": now}
#construct np array
dtype_conf = [('bid', '<f4'), ('ask', '<f4'), ('time', 'datetime64[us]')]
new_tick = np.array([(11.11, 22.22, now)], dtype=dtype_conf)
# existing deque object named lst_d
lst_d.append(list(new_tick))
# example of how your deque may look
lst_d = deque([[1, 2, 'time1'], [3, 4, 'time3'], [4, 5, 'time4']])
#fast dataframe construction
print(pd.DataFrame(list(lst_d), columns=['bid', 'ask', 'time']))
#    bid  ask   time
# 0    1    2  time1
# 1    3    4  time3
# 2    4    5  time4

不确定为什么numpy数组需要reshape

# example of how your deque may look
lst_d = np.array([[1, 2, 'time1'], [3, 4, 'time3'], [4, 5, 'time4']])
#fast dataframe construction
print(pd.DataFrame(lst_d, columns=['bid', 'ask', 'time']))
#    bid  ask   time
# 0    1    2  time1
# 1    3    4  time3
# 2    4    5  time4

相关内容

  • 没有找到相关文章

最新更新