使用 DateOffset 重新采样可能会导致 NotImplementedError

qan*_*our 10 pandas

文档resample说它可以以 aDateOffset作为规则
但是尝试这样做有时会导致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()
Run Code Online (Sandbox Code Playgroud)

痕迹:

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
Run Code Online (Sandbox Code Playgroud)

我是否正确resample只支持某些DateOffsets

什么类型不/不支持?

rud*_*vic 1

正如评论所说,这是一个错误,但您可以解决它:

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

您可以使用等效项TimeDelta或子类之一DateOffset