熊猫时间序列重新采样和插值

Kar*_*tik 3 interpolation time-series pandas python-3.5

我有时间戳传感器数据.由于技术细节,我以大约一分钟的间隔从传感器获取数据.数据可能如下所示:

   tstamp               val
0  2016-09-01 00:00:00  57
1  2016-09-01 00:01:00  57
2  2016-09-01 00:02:23  57
3  2016-09-01 00:03:04  57
4  2016-09-01 00:03:58  58
5  2016-09-01 00:05:00  60
Run Code Online (Sandbox Code Playgroud)

现在,基本上,如果我在确切的时间内得到所有数据,我会非常高兴,但我没有.保存分布并在每分钟获得数据的唯一方法是进行插值.例如,在行索引1和2之间有83秒,并且在精确分钟获取值的自然方式是在两行数据之间进行插值(在这种情况下,它是57,但事实并非如此)到处).

现在,我的方法是做以下事情:

date = pd.to_datetime(df['measurement_tstamp'].iloc[0].date())
ts_d = df['measurement_tstamp'].dt.hour * 60 * 60 +\
       df['measurement_tstamp'].dt.minute * 60 +\
       df['measurement_tstamp'].dt.second
ts_r = np.arange(0, 24*60*60, 60)
data = scipy.interpolate.interp1d(x=ts_d, y=df['speed'].values)(ts_r)
req = pd.Series(data, index=pd.to_timedelta(ts_r, unit='s'))
req.index = date + req.index
Run Code Online (Sandbox Code Playgroud)

但这对我来说感觉相当漫长.有很好的熊猫方法可以进行重新采样,舍入等.我一整天都在阅读它们,但事实证明,没有什么能像我想要的那样进行插值.resample像a一样工作groupby,平均时间点落在一起.fillna插值,但不是在resample已经通过平均改变数据之后.

我错过了什么,或者我的方法是最好的?


为简单起见,假设我按天和按传感器对数据进行分组,因此一次只插入一个传感器的24小时周期.

piR*_*red 8

d = df.set_index('tstamp')
t = d.index
r = pd.date_range(t.min().date(), periods=24*60, freq='T')

d.reindex(t.union(r)).interpolate('index').ix[r]
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


请注意,periods=24*60适用于每日数据,而不是问题中提供的示例.对于该样本,periods=6将起作用.