假设我有一个包含多个时间戳和值的数据框。我想每Δ values / Δt
秒测量一次2.5
。 Pandas是否提供时间差异化的任何工具?
time_stamp values
19492 2014-10-06 17:59:40.016000-04:00 1832128
167106 2014-10-06 17:59:41.771000-04:00 2671048
202511 2014-10-06 17:59:43.001000-04:00 2019434
161457 2014-10-06 17:59:44.792000-04:00 1294051
203944 2014-10-06 17:59:48.741000-04:00 867856
答案 0 :(得分:7)
肯定会这样。首先,您需要将索引转换为pandas date_range
格式,然后使用可用于与该类索引的系列/数据帧的自定义偏移函数。有用的文档here。阅读有关偏移别名的更多here。
此代码应将您的数据重新采样为2.5秒间隔
#df is your dataframe
index = pd.date_range(df['time_stamp'])
values = pd.Series(df.values, index=index)
#Read above link about the different Offset Aliases, S=Seconds
resampled_values = values.resample('2.5S')
resampled_values.diff() #compute the difference between each point!
应该这样做。
答案 1 :(得分:0)
如果您真的想要时间导数,那么还需要除以自上次采样以来的时间差(增量时间, dt )
一个例子:
dti = pd.DatetimeIndex([
'2018-01-01 00:00:00',
'2018-01-01 00:00:02',
'2018-01-01 00:00:03'])
X = pd.DataFrame({'data': [1,3,4]}, index=dti)
X.head()
data
2018-01-01 00:00:00 1
2018-01-01 00:00:02 3
2018-01-01 00:00:03 4
您可以使用DatetimeIndex上的diff()
查找时间增量。这为您提供了一系列类型的时间增量。不过,您只需要几秒钟的值即可
dt = pd.Series(df.index).diff().dt.seconds.values
dXdt = df.diff().div(dt, axis=0, )
dXdt.head()
data
2018-01-01 00:00:00 NaN
2018-01-01 00:00:02 1.0
2018-01-01 00:00:03 1.0
如您所见,此方法考虑到前两个值之间只有两秒钟,而最后两个值之间只有一秒钟。 :)