差异pandas.DateTimeIndex没有频率

cls*_*udt 8 python time-series pandas data-science

不规则的时间序列data存储在中pandas.DataFrameDatetimeIndex已设置A。我需要索引中连续条目之间的时间差。

我以为会很简单

data.index.diff()
Run Code Online (Sandbox Code Playgroud)

但是得到了

AttributeError: 'DatetimeIndex' object has no attribute 'diff'
Run Code Online (Sandbox Code Playgroud)

我试过了

data.index - data.index.shift(1)
Run Code Online (Sandbox Code Playgroud)

但是得到了

ValueError: Cannot shift with no freq
Run Code Online (Sandbox Code Playgroud)

在执行此操作之前,我不想先推断或强制执行频率。时间序列中有很大的缺口,将会扩大到大量的时间nan。关键是要首先找到这些差距。

那么,执行此看似简单的操作的干净方法是什么?

jez*_*ael 8

diff索引尚未实现。

但是如果需要原始索引或不需要索引参数的构造函数,则可以将索引转换为Series第一,如果需要默认索引值:Index.to_seriesSeries

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]
Run Code Online (Sandbox Code Playgroud)

  • 不错的解决方案。所以索引不会自动成为一个系列,需要记住这一点。 (2认同)