将多个时间序列数据组合到一个2d numpy数组

2024-05-13 06:06:38 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

分钟数组

[['1316275620' '' '' '']
 ['1316275680' '' '' '']
 ['1316275740' '' '' '']
 ..., 
 ['1343206920' '' '' '']
 ['1343206980' '' '' '']
 ['1343207040' '' '' '']]

传感器时间序列数据也被四舍五入到最接近的分钟,我使用数字1英寸从上面的“分钟数组”和“传感器数据”数组中获取时间戳,并为与该传感器相关的记录创建一个掩码。在

传感器数据

^{pr2}$

然后,我希望修改minutes_数组中的记录,对于该掩码为true,并将sensor_data值放入timestamp in minutes_数组后面的第一列中。从我的尝试来看,当一个掩码被应用于它时,似乎不可能改变原来的“minutes_array”,有没有一种方法可以在numpy中实现这个结果,而不需要单独使用for循环和匹配时间戳?在

已解决

根据下面来自@eumiro的回答,我使用了一个solution from the Pandas Docs和上面描述的“sensor_data”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")

Tags: csv数据numpydata记录图表时间传感器
1条回答
网友
1楼 · 发布于 2024-05-13 06:06:38

50万不是一个用python字典无法处理的数字。在

从数据库中读取所有传感器的数据,填充字典,然后构建一个numpy数组,或者更好地将其转换为pandas.DataFrame

import pandas as pd

inp1 = [(1316275620,   1), (1316275680,   2)]
inp2 = [(1316275620,  10), (1316275740,  20)]
inp3 = [(1316275680, 100), (1316275740, 200)]

inps = [('s1', inp1), ('s2', inp2), ('s3', inp3)]

data = {}
for name, inp in inps:
    d = data.setdefault(name, {})
    for timestamp, value in inp:
        d[timestamp] = value
df = pd.DataFrame.from_dict(data)

df现在是:

^{pr2}$

相关问题 更多 >