Python 用于追加和创建数据帧的快速numpy数组结构

Python 用于追加和创建数据帧的快速numpy数组结构,python,pandas,numpy,multiprocessing,time-series,Python,Pandas,Numpy,Multiprocessing,Time Series,我花了几个小时试图找到最有效的方法来构造并将流动的蜱虫数据附加到numpy数组中,然后及时获得熊猫数据帧 #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'), ('ti

我花了几个小时试图找到最有效的方法来构造并将流动的蜱虫数据附加到numpy数组中,然后及时获得熊猫数据帧

#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])
#源刻度数据以dict形式输入
勾选数据={“bid”:float(1.2),“ask”:float(1.3),“time”:datetime.datetime.now()}
#构造np数组

dtype_conf=[('bid','p>
numpy
不是添加数据的好数据类型选择

python中最通用的选择是,它针对在列表的开头或结尾插入项进行了优化

以下是代码的外观:

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阵列,因为我计划通过posix共享内存()使用它用于在多个进程之间快速写入和读取。由于multiprocess.basemanager和类dict/list设置太慢,我一直在寻找一个快速的python共享内存解决方案。我明白了。@trbck。不幸的是,我不知道如何提高numpy append性能。我将保留我的答案,以便其他人不会陷入trap.我的意思是通过vstack“追加”的速度相当快。但是需要重塑np.array以创建带有pd.dataframe的数据帧(a.Reformate((1,-1))[0])会大大降低速度。我还想知道是否可以更改np.array的结构,以更快地将数据帧创建为数据类型(因此不需要对df进行进一步的处理/计算)已经在np.array中正确设置了。@trbck,我添加了一个示例。我不确定为什么需要
restrape
。我建议创建一个元组列表,并创建一个结构化数组一次。您是否知道,每个
vstack
都会创建一个新数组?我明白了。您对如何更有效地追加有更好的想法吗?
# 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