我有一个pandas数据框df_data
,想要使用pandas index.asof()方法查找到指定时间的最近行。我的时间是几秒钟(type = float64)(见下文)。
最初,索引是DateTimeIndex:
In [12]: df_data.index = pd.to_datetime(df_data.index, coerce=True)
df_data.index.dtype
Out[12]: dtype('<M8[ns]')
然后,我将索引从初始时间改为秒:
In [22]: ## Convert the index from DateTimeIndex to a float64
## that is the number of seconds from the initial measurement
df_data.index = (df_data.index - df_data.index[0])/np.timedelta64(1,'s')
In [23]: df_data.index.dtype
Out[23]: dtype('float64')
但是当我尝试使用带浮点数的asof方法时,我得到一个TypeError:
In [24]: df_data.index.asof(10.0)
...
TypeError: Cannot compare type 'Timestamp' with type 'float'
我曾尝试使用datetime,datetime.fromtimestamp等,但无法解决此问题。
答案 0 :(得分:1)
感谢@joris的深刻见解。
<强>解强>
在将索引从DateTimeIndex更改为float之前(即问题中描述的初始测量的秒数),您需要确定时间(在这种情况下,我使用一个简单的示例,一次time_float
)你想在哪里找到最近的索引。然后,这些日期时间索引可以转换为浮点索引:
In [21]: time_float = 10.0
time_td = df_data.index[0]+ datetime.timedelta(0,time_float)
## convert from the DateTimeIndex type to time from start in seconds as type float64
time_index = (df_data.index.asof(time_td) - df_data.index[0]).total_seconds()
time_index
Out[21]: 9.86296
现在,在将索引(上面给出)从初始时间整体转换为秒后,我可以参考最接近time_float
的索引,即time_index
:
In [24]: df_data.ix[time_index,0]
Out[24]: 0.00075450129999999997