gpt4 book ai didi

python Pandas TypeError : Cannot compare type 'Timestamp' with type 'float'

转载 作者:太空宇宙 更新时间:2023-11-04 05:57:27 26 4
gpt4 key购买 nike

我有一个 pandas 数据框,df_data,想使用 pandas index.asof() 方法找到离指定时间最近的行。我的时间以秒为单位(类型 = 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 方法与 float 一起使用时,我得到一个 TypeError:

In [24]: df_data.index.asof(10.0)
...
TypeError: Cannot compare type 'Timestamp' with type 'float'

我尝试过使用 datetime、datetime.fromtimestamp 等,但未能解决问题。

最佳答案

感谢@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

关于 python Pandas TypeError : Cannot compare type 'Timestamp' with type 'float' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26918045/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com