没有频率的差异pandas.DateTimeIndex

16

一个不规则时间序列的数据存储在pandas.DataFrame中。已设置DatetimeIndex。我需要获得索引连续条目之间的时间差。

我认为这很简单

data.index.diff()
但是得到了
AttributeError: 'DatetimeIndex' object has no attribute 'diff'

我尝试过

data.index - data.index.shift(1)

但收到

ValueError: Cannot shift with no freq

在执行此操作之前,我不想推断或强制执行首选频率。时间序列中存在大的间隙,这些间隙会扩展成大量的nan值。关键是先找到这些间隙。

那么,有什么清晰的方法可以执行这个看似简单的操作呢?

2个回答

19

目前还没有对索引实现diff函数。

不过,可以通过使用Index.to_series将索引转换为Series,如果需要保留原始索引的话。如果需要默认索引,则可以使用无索引参数的Series构造函数。

代码示例:

rng = pd.to_datetime(['2015-01-10','2015-01-12','2015-01-13'])
data = pd.DataFrame({'a': range(3)}, index=rng)  
print(data)
             a
 2015-01-10  0
 2015-01-12  1
 2015-01-13  2

a = data.index.to_series().diff()
print(a)

2015-01-10      NaT
2015-01-12   2 days
2015-01-13   1 days
dtype: timedelta64[ns]

a = pd.Series(data.index).diff()
print(a)
 0      NaT
 1   2 days
 2   1 days
dtype: timedelta64[ns]


2
不错的解决方案。因此,索引并不自动成为系列,需要记住这一点。 - clstaudt

1

这个问题有点旧了,但是无论如何...

我使用 numpy.diff(data.index) 来获取时间差。运行良好。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接