有两个主要步骤可以到达您想要的位置。首先,我们需要获取您所期望的时间戳(以秒为单位,没有间隙)。
遗憾的是,我们需要将您的数据分配到这些时间戳上,并用之前记录的值填充任何缺失值。
此解决方案使用 python。如果您不熟悉 Python 和数据框,这可能是一个很好的练习,它显示了与电子表格相比编程的强大功能。
基本设置
import pandas as pd
import numpy as np
这只是创建您提供的示例数据框。时间将用于创建日期时间索引,并且值将是“数据” - 我们唯一的列。
times = ["04:23:12", "04:23:13", "04:23:14", "04:23:15", "04:23:16", "04:24:01", "04:24:02"]
values = [2709.082597, 2708.747333, 2708.442548, 2708.229198, 2708.229198, 2708.137763, 2707.924413]
我们创建一个适当的日期时间系列作为我们的索引
index = pd.to_datetime(times)
将其放入数据框中
df = pd.DataFrame(index=index, data=values, columns=['data'])
df.head()
data
2018-09-27 04:23:12 2709.082597
2018-09-27 04:23:13 2708.747333
2018-09-27 04:23:14 2708.442548
2018-09-27 04:23:15 2708.229198
2018-09-27 04:23:16 2708.229198
第一部分
现在我将创建第二个空数据帧,但是它将在索引中具有所需的时间戳,即它将在几秒钟内上升而没有任何间隙。
我们可以使用上面记录的第一个和最后一个时间戳(或您需要的任何其他时间戳)
new_start = df.index[0]
new_end = df.index[-1]
我们可以将频率指定为秒,使用freq='s'
如下所示的参数:
new_index = pd.date_range(new_start, new_end, freq='s')
现在我们创建具有所需索引的空日期框:
new_df = pd.DataFrame(index=new_index)
第二部分
现在我们结合两个数据框(一个与您的数据,一个与目标索引),最后我们填充缺失值。
我们根据它们的索引合并两个数据框。使用 method="outer" 意味着我们将所有值都保留在两个索引中,因此不会丢失任何时间戳。在你的情况下,我们基本上只是new_index
再次结束,因为它已经很完美了。
combined_df = pd.merge(df, new_df, method="outer", left_index=True, right_index=True)
最后一步非常简单:用最后记录的值填充缺失值。这里的ffill
意思是forward fill,这正是你想要的:
final_df = combined_df.fillna(method='ffill')
final_df
data
2018-09-27 04:23:12 2709.082597
2018-09-27 04:23:13 2708.747333
2018-09-27 04:23:14 2708.442548
2018-09-27 04:23:15 2708.229198
2018-09-27 04:23:16 2708.229198
2018-09-27 04:23:17 2708.229198
2018-09-27 04:23:18 2708.229198
...
...
2018-09-27 04:23:58 2708.229198
2018-09-27 04:23:59 2708.229198
2018-09-27 04:24:00 2708.229198
2018-09-27 04:24:01 2708.137763
2018-09-27 04:24:02 2707.924413
该解决方案显然只适用于处理此类静态数据,但更好的解决方案可能是在记录过程中实现一个短循环,如果没有给出新的记录,则只需重复最后一次记录,确保每秒记录一个数据点。