Timedelta操作产生错误的结果

时间:2015-04-29 07:06:04

标签: python pandas

我试图在数据框中添加一列,指示每行索引和固定时间戳的时差。数据框由datetimeindex和一些字符串列组成。

我用

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

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

我读到大熊猫的先前版本确实存在这个问题,但据说很长一段时间了。

我的解决方法是复制索引,将其转换为int64,将t0转换为int64,从所有行中减去t0,然后将diff列转换回timedeltas,但这看起来非常低效且难看。

PS:在OS X和Debian 8上都使用pandas 0.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_between_time()获取索引,只查看时间,而不是日期。这更令人困惑。

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

1 个答案:

答案 0 :(得分:1)

因此,最终的原因是您使用between_time查找所需范围内的时间。不幸的是,between_time实际上并没有找到某个范围内的时间,它找到的时间与当天的相同时间相匹配,无论哪一天(我之前确实犯了同样的错误)。要找到特定范围内的时间,您可以这样做:

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

如果您的DateTimeIndex是单调的/有序的,这就可以了,如果不是,您可能想先排序。