我正在从MongoDB数据库获取数据,并将其转换为Pandas DataFrame,以便稍后完成其他操作.MongoDB数据库包含一组基于时间的条目,由于它们的存储方式,每个频道的每个样本都是它自己的文档.其中一些频道总是在同一时间采样,而另一些频道则在不同的时间表上.下面是一个文档的快速示例.
timestamp:
2024-01-05T08:16:30.848+00:00
metaData:
deviceId:
"123"
channelName:
"Channel1"
_id:
659c23016ad87924ff552882
Channel1:
10345
因此,当我try 使用如下内容从数据库中获取一些频道时
b = pd.DataFrame(list(timeCol.find({'metaData.deviceId':'123','metaData.channelName':{'$in':['Channel1','Channel2','Channel3','Channel4','Channel5']}},{'_id':0,'metaData':0}).sort('timestamp')))
我得到了一个数据帧,如下所示
timestamp Channel1 Channel2 Channel3 Channel4 Channel5
0 2024-01-05 20:27:31.340 0.0 NaN NaN NaN NaN
1 2024-01-05 20:27:31.382 1.0 NaN NaN NaN NaN
2 2024-01-05 20:27:31.400 NaN 2456 NaN NaN NaN
3 2024-01-05 20:27:31.400 NaN NaN 10.231 NaN NaN
4 2024-01-05 20:27:31.400 NaN NaN NaN 2.4 NaN
但它有更多的条目,因为我通常对几个小时的时间跨度感兴趣.无论如何,如您所见,Channels2-5通常共享一个时间戳,但Channel1的速率更高.
Is there any way that I can set the timestamp column to be the index and have Pandas only use unique entries for timestamp and then correctly sample the other columns?个
我知道我可能可以通过 for each 列创建一个系列,然后合并/加入它们来做到这一点,但我认为这将需要 for each 通道单独调用数据库,并且为了速度和效率,我更愿意限制数据库调用.我可以请求对数据库进行一些更改,但这是数据广播的方式(每个频道/设备都有单独的消息),没有什么能保证频道会在相同的时间戳上,但这似乎更多地发生在某些频道上.还有其他频道以更高的速度播放,我也需要在我的分析中工作,但我计划单独查询这些频道,稍后再添加它们.
谢谢!