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

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

该数据位于一个大约有500万条记录的表的sqlite db中.我打算使用javascript图表库dygraph显示此数据,我已经通过按传感器名称执行sql查询并分别保存到csv来分别为每个传感器生成了时间序列图.我希望有一个图表显示所有数据点,并用一条线代表每个传感器.

我创建了一个名为’minutes_array’的字符串类型的numpy 2d数组,第一列为unix时间戳,四舍五入到从传感器时间序列开始到结束的每一分钟的最近分钟,并用三个空列填充每个列中的数据可用的3个传感器中的一个.

minutes_array

[['1316275620' '' '' '']

['1316275680' '' '' '']

['1316275740' '' '' '']

...,

['1343206920' '' '' '']

['1343206980' '' '' '']

['1343207040' '' '' '']]

然后,将传感器时间序列数据也四舍五入到最接近的分钟,我使用numpy.in1d并从上述“ minutes_array”和“ sensor_data”数组中获取时间戳,并为与该传感器相关的记录创建掩码.

sensor_data

[['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]

然后,我希望修改minutes_array中对于该掩码正确的记录,并将sensor_data值放置在minutes_array中时间戳之后的第一列中.从我的尝试来看,在将其应用于蒙版时似乎无法更改原始的“ 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")

解决方法:

五百万不是一个无法用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现在是:

s1 s2 s3

1316275620 1 10 NaN

1316275680 2 NaN 100

1316275740 NaN 20 200

标签:pandas,time-series,python,numpy

来源: https://codeday.me/bug/20191101/1980604.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值