熊猫中不规则,不连续的时期

时间:2013-08-28 11:03:11

标签: python pandas time-series

我需要代表一系列事件。这些事件有点不寻常,因为它们是:

  • 非连续
  • 非重叠
  • 不规则的持续时间

例如:

  • 1200 - 1203
  • 1210 - 1225
  • 1304 - 1502

我想使用Pandas.PeriodIndex来表示这些事件,但我无法弄清楚如何创建具有不规则持续时间的Period个对象。

我有两个问题:

  1. 有没有办法使用现有的Pandas功能创建具有不规则持续时间的Period个对象?
  2. 如果没有,您能否建议如何修改Pandas以提供不规则持续时间Period个对象? (this comment表明可能“使用自定义的DateOffset类,并使用适当的onOffset,前滚,回滚和应用方法”)
  3. 注释

    1. Period的文档字符串表明可以为“5分钟”指定5T之类的任意持续时间。我相信这个docstring是不正确的。运行pd.Period('2013-01-01', freq='5T')会产生异常ValueError: Only mult == 1 supported。我已报告this issue
    2. "time stamps vs time spans" section in the Pandas documentation状态“对于常规时间跨度,大熊猫使用Period个对象作为标量值,使用PeriodIndex作为跨度序列。更好地支持不规则的时间间隔未来版本中将出现任意的起点和终点“(我的重点)
    3. 更新1

      使用自定义持续时间构建Period看起来非常简单。 但是我认为主要障碍是说服PeriodIndex接受Periodsfreqs的不同。 e.g:

      In [93]: pd.PeriodIndex([pd.Period('2000', freq='D'), 
                               pd.Period('2001', freq='T')])
      
      ValueError: 2001-01-01 00:00 is wrong freq
      

      PeriodIndex中的一个中心假设是每个句点都有相同的freq

2 个答案:

答案 0 :(得分:1)

如果你有一段时间的分钟,你必须通过日期时间,包括如下的分钟:

pd.PeriodIndex([pd.Period('2000-01-01 00:00', freq='T'), 
                     pd.Period('2001-01-01 00:00', freq='T')])

结果:

PeriodIndex(['2000-01-01 00:00', '2001-01-01 00:00'], dtype='period[T]', freq='T')

答案 1 :(得分:0)

根据应用程序的不同,一种可能的解决方案是通过创建PeriodIndex来对数据进行分区,该PeriodIndex的周期等于处理数据所需的最小时间分辨率,然后在数据块之间划分数据对于每个事件,将剩余的箱子留空。