我需要回到月初,但是如果我已经开始的话,我想呆在那里。应该使用n = 0的Pandas anchor 定偏移量做到这一点,但它不会在(-)MonthBegin的 anchor 定点之间产生预期结果。
例如这个pd.Timestamp('2017-01-06 00:00:00') - pd.tseries.offsets.MonthBegin(n=0)
我希望将我移回Timestamp('2017-01-01 00:00:00')
但是我得到了Timestamp('2017-02-01 00:00:00')
我究竟做错了什么?还是您认为这是一个错误?
我还可以看到,对于MonthEnd,相同的规则也可以正常工作,因此将下面的2个结合起来
我得到了pd.Timestamp('2017-01-06 00:00:00')+pd.tseries.offsets.MonthEnd(n=0)-pd.tseries.offsets.MonthBegin(n=1)
的预期效果,但是我希望它可以与Timestamp('2017-01-01 00:00:00')
一起使用
最佳答案
这确实是正确的行为,它是“ anchor 定偏移语义”中列出的规则的一部分,该规则用于支持特定频率偏移开始/结束的偏移。
考虑给定的示例:
from pandas.tseries.offsets import MonthBegin
pd.Timestamp('2017-01-02 00:00:00') - MonthBegin(n=0)
Out[18]:
Timestamp('2017-02-01 00:00:00')
注意,将与
MonthBegin
偏移量相对应的 anchor 设置为每个月的第一天。现在,由于给定的时间戳明显超过了这一天,因此将自动将它们视为下个月的一部分,并且只有在此之后才开始滚动(无论向前还是向后)。为了得到您想要的东西,您需要提供
n=1
,它将时间戳转换为正确的日期。pd.Timestamp('2017-01-02 00:00:00') - MonthBegin(n=1)
Out[20]:
Timestamp('2017-01-01 00:00:00')
如果您在确切的 anchor 上设置了日期,那么根据随附的文档,它也会为您提供所需的结果。
pd.Timestamp('2017-01-01 00:00:00') - MonthBegin(n=0)
Out[21]:
Timestamp('2017-01-01 00:00:00')
关于(-)MonthBegin的 Pandas 日期时间 anchor 定偏移量未按预期工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42008805/