Timedelta操作产生错误的结果

2024-04-19 12:41:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试向数据帧添加一列,该列指示每行索引的时间差和固定的时间戳。数据帧由一个datetimeindex和一些字符串列组成。你知道吗

我用

 d["diff"] = d.index-t0

计算所述时差。由于之前的过滤,最大可能的差异值应该在10到20秒之间。但是,我经常会在一天内得到一些差异(少1到10秒),即使实际的差异大约是5秒

我读到以前版本的熊猫有这样的问题,但据说是长期固定的。你知道吗

我的解决方法是复制索引,将其强制转换为int64,将t0强制转换为int64,从所有行中减去t0,然后将diff列转换回timedelta,但这看起来非常低效和丑陋。你知道吗

PS:在OSX和Debian8上都使用Pandas0.16.0。你知道吗

编辑:根据要求,一个样本:

2013-12-12 13:50:48 # t0
timestamp
2013-12-16 13:50:52   4 days 00:00:04
Name: diff, dtype: timedelta64[ns]

我刚刚注意到,日期完全不存在,我使用indexer\u between\u time()来获取索引,只查看时间,而不是日期。这更让人困惑。你知道吗

indices = df.index.indexer_between_time(start_time=index,end_time=index+DateOffset(seconds=t_offset) )   

Tags: 数据字符串indextime时间diff差异between
1条回答
网友
1楼 · 发布于 2024-04-19 12:41:29

所以最终的原因是你用between_time来寻找你想要的时间范围。不幸的是,between_time实际上找不到某个范围内的时间,它找到的时间与一天中相同的时间相匹配,而不管是哪一天(我以前肯定犯过同样的错误)。要查找特定范围内的时间,可以执行以下操作:

end_time = index + DateOffset(seconds=t_offset)
df.index[index:end_time]

只要你的DateTimeIndex是单调的/排序的,这就可以工作,如果不是,你可能想先排序。你知道吗

相关问题 更多 >