【问题标题】:Resample with DateOffset can give NotImplementedError使用 DateOffset 重新采样可以给出 NotImplementedError
【发布时间】:2020-02-13 08:43:42
【问题描述】:

resample 的文档说它可以将DateOffset 作为规则
但尝试这个有时会导致NotImplementedError

  • 传递一个字符串,例如resample('2M') 有效。
  • 等效的resample(pd.offsets.MonthEnd(2)) 也可以。
  • 但类似(尽管不同)resample(pd.offsets.DateOffset(months=2)) 失败。

这是要重现的代码:

idx = pd.date_range('20190101', periods=14, freq='3W')
s   = pd.Series(range(len(idx)), index=idx)
s.resample(pd.offsets.DateOffset(months=2)).mean()

追踪:

Traceback (most recent call last):
    ....
  File "....core\generic.py", line 8449, in resample
    level=level,
  File "....core\resample.py", line 1305, in resample
    tg = TimeGrouper(**kwds)
  File "....core\resample.py", line 1378, in __init__
    rule = freq.rule_code
  File "....tseries\offsets.py", line 442, in rule_code
    return self._prefix
  File "....tseries\offsets.py", line 438, in _prefix
    raise NotImplementedError("Prefix not defined")
NotImplementedError: Prefix not defined

resample 仅支持某些DateOffsets 对吗?

它不/不支持哪些种类?

【问题讨论】:

  • 相当于 '2M' 将是 s.resample(pd.offsets.MonthEnd(2)).mean()
  • 已编辑。谢谢。
  • 这方面有什么更新吗?
  • @ChristophBühler 有一个关于这个问题的错误报告:github.com/pandas-dev/pandas/issues/31697
  • 这个错误似乎还没有得到处理。有没有人发现另一种方法?也许以某种方式将 DateOffset 转换为字符串...

标签: pandas


【解决方案1】:

正如 cmets 所说,它是 bug,但您可以解决它:

根据文档,rule= 参数 DataFrame.resample() 可以是 DateOffset、Timedelta 或 str 类型。 显然,它实际上需要一些 DateOffset 子类 (如 MonthEnd、BusinessDay 等),因为 rule_code 属性不是 在父类中定义。

您可以使用等效的TimeDeltaDateOffset 的子类之一

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-12
    • 2022-01-21
    • 2017-02-03
    • 2018-12-27
    • 2014-01-20
    • 2014-05-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多