如何在熊猫时间索引中找到漏洞

时间:2014-05-21 12:10:07

标签: python pandas

我很有兴趣知道时间索引是否包含漏洞。说我有以下系列

ss = pd.Series( nr.randn(3), index=[ '2014-01-01', '2014-01-02', '2014-01-03' ] )
ss.index = pd.to_datetime( ss.index )
ss

输出

2014-01-01    0.976455
2014-01-02   -0.610322
2014-01-03   -0.631592
dtype: float64

我以为我可以做我对列表(l[1:]-l[:-1]

的处理
ss.index[1:] - ss.index[:-1]

但这是输出,我不明白

<class 'pandas.tseries.index.DatetimeIndex'>
[2014-01-03]
Length: 1, Freq: None, Timezone: None

我最终做了这件事(这有点难看)

tmp = pd.Series( ss.index[1:] ) - pd.Series( ss.index[:-1] )
(tmp[0] == tmp ).all()

所以我有两个问题:

  • ss.index[1:] - ss.index[:-1]在做什么?
  • 有没有更好的方法来做我正在做的事情?

3 个答案:

答案 0 :(得分:1)

这是一种略有不同的方法。如果可以,将返回频率(例如,如果每天的值间隔没有孔,则返回它的频率)。否则None

In [14]: pd.infer_freq(Series(np.random.randn(3),index=['20140101','20140102','20140103']).index)
Out[14]: 'D'

In [15]: pd.infer_freq(Series(np.random.randn(3),index=['20140101','20140102','20140104']).index)

In [31]: pd.infer_freq(Series(np.random.randn(3),index=['20140101','20140201','20140301']).index)
Out[31]: 'MS'

答案 1 :(得分:0)

您可以使用numpy.diff()

执行此操作
np.diff(np.array(ss.index))

这可能有一些略微光滑的方式,但上述工作。它给你:

array([86400000000000, 86400000000000], dtype='timedelta64[ns]')

答案 2 :(得分:0)

你可以尝试

tDelta = ss.index.date[1:]-ss.index.date[:-1]
secondBetweenEachEntries = [t.total_seconds() for t in tDelta]

这给了

import pandas as pd
import numpy.random as nr
ss = pd.Series( nr.randn(3), index=[ '2014-01-01', '2014-01-02', '2014-01-03' ] )
ss.index = pd.to_datetime( ss.index )
tDelta = ss.index.date[1:]-ss.index.date[:-1]