Python 将多个timeseries数据组合到一个2d numpy阵列

Python 将多个timeseries数据组合到一个2d numpy阵列,python,numpy,time-series,pandas,Python,Numpy,Time Series,Pandas,我有一年内三个不同传感器的timeseries数据,传感器大约每3分钟产生一个数据点,传感器不同步,因此它们在彼此相对的不同时间产生一个数据点输出 这些数据位于一个包含大约50万条记录的表中的sqlite db中。我打算使用javascript图表库dygraph显示这些数据,通过按传感器名称执行sql查询并保存到csv,我已经为每个传感器分别生成了timeseries图表。我希望有一个图表显示所有数据点,用一条线表示每个传感器 我创建了一个名为“minutes_array”的字符串类型的num

我有一年内三个不同传感器的
timeseries
数据,传感器大约每3分钟产生一个数据点,传感器不同步,因此它们在彼此相对的不同时间产生一个数据点输出

这些数据位于一个包含大约50万条记录的表中的sqlite db中。我打算使用javascript图表库dygraph显示这些数据,通过按传感器名称执行sql查询并保存到csv,我已经为每个传感器分别生成了
timeseries
图表。我希望有一个图表显示所有数据点,用一条线表示每个传感器

我创建了一个名为“minutes_array”的字符串类型的numpy 2d数组,第一列是unix时间戳,四舍五入到最接近的分钟,覆盖从传感器时间序列开始到结束的每一分钟,其中三个空列将填充来自3个传感器的数据(如果可用)

分钟\u数组

[['1316275620' '' '' '']
 ['1316275680' '' '' '']
 ['1316275740' '' '' '']
 ..., 
 ['1343206920' '' '' '']
 ['1343206980' '' '' '']
 ['1343207040' '' '' '']]
然后,传感器时间序列数据也四舍五入到最接近的分钟,我使用numpy.in1d,从上面的“分钟数数组”和“传感器数数组”中获取时间戳,并为与该传感器相关的记录创建掩码

传感器数据

[['1316275680' '215.2']
 ['1316275860' '227.0']
 ['1316276280' '212.2']
 ..., 
 ['1343206380' '187.7']
 ['1343206620' '189.4']
 ['1343206980' '192.9']]

 mask = np.in1d(minutes_array[:,0], sensor_data[:,0])

 [False  True False ..., False  True False]
然后,我希望修改分钟数组中的记录,这些记录对于该掩码是正确的,并将传感器数据值放入分钟数组中时间戳后的第一列。从我的尝试来看,当掩码应用于原始“分钟数组”时,似乎不可能对其进行更改,是否有一种方法可以在numpy中实现此结果,而无需单独使用for循环和匹配时间戳

解决了的 根据@eumiro下面的回答,我使用了一个和上面描述的“传感器数据”numpy数组

sensors = ['s1','s2','s3']    
sensor_results = {}
for sensor in sensors:
    sensor_data = get_array(db_cursor, sensor)
    sensor_results[sensor] = pd.Series(sensor_data[:,1], \
                                   index=sensor_data[:,0])
df = pd.DataFrame(buoy_results)
df.to_csv("output.csv")

50万不是一个用python字典无法管理的数字

从数据库中读取所有传感器的数据,填写字典,然后构建numpy阵列,或者更好地将其转换为:

df
现在是:

            s1  s2   s3
1316275620   1  10  NaN
1316275680   2 NaN  100
1316275740 NaN  20  200

当你说“填字典”时,我不确定你建议的结构是什么?将传感器名称作为键或时间戳?@seumas-构建一个dict的dict,即
data[timestamp][sensor]
data[sensor][timestamp]
。两者都可以轻松转换为pandas.DataFrame。
            s1  s2   s3
1316275620   1  10  NaN
1316275680   2 NaN  100
1316275740 NaN  20  200