【问题标题】:Difference pandas.DateTimeIndex without a frequency没有频率的差异 pandas.DateTimeIndex
【发布时间】:2018-08-22 23:51:01
【问题描述】:

不规则的时间序列data 存储在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 的大量运行。重点是首先找到这些差距。

那么,什么是干净的方法来完成这个看似简单的操作呢?

【问题讨论】:

    标签: python pandas time-series data-science


    【解决方案1】:

    还没有为索引实现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】:

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

    我使用numpy.diff(data.index) 来获取时间增量。工作正常。

    【讨论】:

      猜你喜欢
      • 2018-02-23
      • 2016-10-21
      • 1970-01-01
      • 2021-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-27
      相关资源
      最近更新 更多