【发布时间】:2013-08-31 10:05:48
【问题描述】:
我需要表示一系列事件。这些事件有点不寻常,因为它们是:
- 不连续
- 不重叠
- 持续时间不规则
例如:
- 1200 - 1203
- 1210 - 1225
- 1304 - 1502
我想使用Pandas.PeriodIndex 来表示这些事件,但我不知道如何创建持续时间不规则的Period 对象。
我有两个问题:
- 有没有办法使用现有的 Pandas 功能创建持续时间不规则的
Period对象? - 如果没有,您能否建议如何修改 Pandas 以提供不规则持续时间
Period对象? (this comment 建议可能“使用带有适当设计的 onOffset、rollforward、rollback 和 apply 方法的自定义 DateOffset 类”)
注意事项
-
Period的文档字符串表明可以指定任意持续时间,例如“5 分钟”的5T。我相信这个文档字符串是不正确的。运行pd.Period('2013-01-01', freq='5T')会产生异常ValueError: Only mult == 1 supported。我已举报this issue。 -
"time stamps vs time spans" section in the Pandas documentation 声明“对于常规时间跨度,pandas 使用
Period对象作为标量值,PeriodIndex用于跨度序列。更好地支持具有任意起点和终点的不规则间隔即将在未来的版本中推出。”(我的重点)
更新 1
构建具有自定义持续时间的Period 看起来非常简单。 但是我认为主要的绊脚石是说服PeriodIndex 接受Periods 和不同的freqs。例如:
In [93]: pd.PeriodIndex([pd.Period('2000', freq='D'),
pd.Period('2001', freq='T')])
ValueError: 2001-01-01 00:00 is wrong freq
PeriodIndex 中的一个中心假设似乎是每个 Period 都具有相同的 freq。
【问题讨论】:
-
我认为最好保持月经周期,即定期。例如,我们可以将您正在寻找的内容称为“时间跨度”。经期对这里有什么帮助?例如,您能否为每个跨度创建一个“开始”列和一个“结束”列?请备份并解释您试图用您的数据完成什么。
-
嗨,丹。感谢您的快速回复。您的建议与我现在计划实施的非常相似:我计划使用
DataFrame。每行将代表一个事件。索引将表示每个事件的开始时间,并且将有一个end列来表示每个事件的结束时间。备份并解释我的最终目标:我正在编写一个“特征检测器”,它贯穿一个时间序列数据集,并识别该原始数据中的“特征”,这些“特征”可以持续不同的持续时间。 -
我有一个类似的问题,虽然我的经期很规律,但我无法创建具有我需要的持续时间的经期 - 例如'5000T'
-
我在 Pandas 文档中找到了这个。这个问题似乎是已知的。 “对于常规时间跨度,pandas 使用 Period 对象作为标量值,使用 PeriodIndex 作为跨度序列。在未来的版本中将更好地支持具有任意起点和终点的不规则间隔。” pandas.pydata.org/pandas-docs/stable/…
标签: python pandas time-series