【问题标题】:DatetimeIndex: what is the purpose of 'freq' attribute?DatetimeIndex:'freq' 属性的用途是什么?
【发布时间】:2018-06-19 21:41:05
【问题描述】:

我错过了 pandas DatatimeIndex 对象中“频率”属性的要点。它可以在构造时传递,也可以在任何时候设置为属性,但是当此属性更改时,我看不到 DatatimeIndex 对象的行为有任何差异。

请看这个例子。我们将 1 天添加到具有 freq='B' 但返回的索引包含非工作日的 DatetimeIndex:

import pandas as pd
from pandas.tseries.offsets import *

rng = pd.date_range('2012-01-05', '2012-01-10', freq=BDay())
index = pd.DatetimeIndex(rng)
print(index)

index2 = index + pd.Timedelta('1D')
print(index2)

这是输出:

DatetimeIndex(['2012-01-05', '2012-01-06', '2012-01-09', '2012-01-10'], dtype='datetime64[ns]', freq='B')

DatetimeIndex(['2012-01-06', '2012-01-07', '2012-01-10', '2012-01-11'], dtype='datetime64[ns]', freq='B')
  • 为什么在对 DatetimeIndex 执行计算 (+/- Timedelta) 时不考虑频率?
  • 为什么 freq 不能反映 DatetimeIndex 中包含的实际数据? (即使它包含非工作日,它也会显示“B”)

【问题讨论】:

  • 我的印象是freq被使用to inform optimisations on the index;它不是验证器。因此,它从最初的 date_range() 调用中获取线索,以对可能需要进行哪些优化做出明智的猜测。

标签: python pandas


【解决方案1】:

来自github 问题:

freq 属性是纯描述性的,所以它不 并且不应该影响计算。文档可能会更清晰。

【讨论】:

    【解决方案2】:

    您正在寻找shift

    index.shift(1)
    Out[336]: DatetimeIndex(['2012-01-06', '2012-01-09', '2012-01-10', '2012-01-11'], dtype='datetime64[ns]', freq='B')
    

    BDay 也会这样做

    from pandas.tseries.offsets import BDay
    index + BDay(1)
    Out[340]: DatetimeIndex(['2012-01-06', '2012-01-09', '2012-01-10', '2012-01-11'], dtype='datetime64[ns]', freq='B')
    

    【讨论】:

    • @luca 为什么你说,不使用它,它传递给 shift ,如上所示
    猜你喜欢
    • 2019-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-04
    • 2014-02-01
    相关资源
    最近更新 更多