对Pandas来说还很陌生,并且开始理解这个概念。希望您能指出正确的方向。
我是以下结构的测量温度值的数据集。该数据集的长度约为1-2百万个条目。由于某些传感器在某个时刻发生故障,因此我有很多丢失的数据。 location temperature
timestamp
2019-08-22 21:28:56 Garage 23.54
2019-08-22 21:29:44 bedroom 23.33
2019-08-23 22:21:06 outside1 25.00
2019-08-23 22:21:33 outside2 24.12
2019-08-22 21:29:53 Garage 23.40
[...]
我想做的是对数据集重新采样,以使各个传感器的时间戳对齐。 具体地说,我希望能够计算各种传感器的均值/差值。我该怎么做?
总的来说,我不确定最好的方法是代表此类数据以使其易于使用。我知道要创建群组,这已经是一个不错的开始。但是我仍然不知道如何以简单的方式在传感器之间创建这些计算。
任何帮助将不胜感激。 谢谢!
答案 0 :(得分:1)
我认为最好的方法是首先旋转数据帧,以便为每个传感器设置一个时间序列列:
df.pivot(columns="location", values="temperature")
location Garage bedroom outside1 outside2
timestamp
2019-08-22 21:28:56 23.54 NaN NaN NaN
2019-08-22 21:29:44 NaN 23.33 NaN NaN
2019-08-22 21:29:53 23.40 NaN NaN NaN
2019-08-23 22:21:06 NaN NaN 25.0 NaN
2019-08-23 22:21:33 NaN NaN NaN 24.12
然后您可以使用插值填充丢失的数据
df.pivot(columns="location", values="temperature").interpolate(method="time", limit_direction="both")
location Garage bedroom outside1 outside2
timestamp
2019-08-22 21:28:56 23.540000 23.33 25.0 24.12
2019-08-22 21:29:44 23.422105 23.33 25.0 24.12
2019-08-22 21:29:53 23.400000 23.33 25.0 24.12
2019-08-23 22:21:06 23.400000 23.33 25.0 24.12
2019-08-23 22:21:33 23.400000 23.33 25.0 24.12
现在您应该使所有数据点在时间上对齐,也许可以重新采样为恒定的采样率,比如说“ 1分钟”
df.pivot(columns="location", values="temperature").interpolate(method="time", limit_direction="both").resample("1 min").mean()
location Garage bedroom outside1 outside2
timestamp
2019-08-22 21:28:00 23.540000 23.33 25.0 24.12
2019-08-22 21:29:00 23.411053 23.33 25.0 24.12
2019-08-22 21:30:00 NaN NaN NaN NaN
2019-08-22 21:31:00 NaN NaN NaN NaN
2019-08-22 21:32:00 NaN NaN NaN NaN
... ... ... ... ...
2019-08-23 22:17:00 NaN NaN NaN NaN
2019-08-23 22:18:00 NaN NaN NaN NaN
2019-08-23 22:19:00 NaN NaN NaN NaN
2019-08-23 22:20:00 NaN NaN NaN NaN
2019-08-23 22:21:00 23.400000 23.33 25.0 24.12
您显然有很多这样的短采样间隔和稀疏数据点的丢失数据,我想您的实际数据集中会有更多(理想情况下,每个重采样间隔中至少要有一个数据点)。
现在由您和您的实际数据来决定如何进行。您可以使用.nearest()
而不是.mean()
来填充丢失的数据。如果缺少的项目很少,则可以用滚动平均值填充它们。