当我尝试这个时:
>>> a = numpy.datetime64('1995-12-31')
>>> b = a + pandas.Timedelta(1, unit='M')
>>> print(b)
我希望看到
1996-01-31
但是我却得到了
1996-01-30 10:29:06.
知道为什么吗?非常感谢。
一个月的时间增量是一年的长度除以12。
您需要检查您的日期并添加适当的天数。或者,增加月份数(如果需要,可以滚动到下一年),并保持天数不变。
正如他在回答中提到的@hpaulj:
由于每个月的时长不一,因此在时间中加上“月”存在固有的歧义。
此外,在0.25.0
版本中,Pandas dropped support用于在M
功能中使用单位Y
(月)和Timedelta
(年)。
但是正如官方熊猫guide所述,对于绝对持续时间,您应该使用Timedelta,对于尊重日历算术的相对持续时间,请使用DateOffset,这正是我们在您的情况下所需要的:] >
基本DateOffset
的作用类似于dateutil.relativedelta
(relativedelta documentation),它将日期时间偏移指定的相应日历持续时间。所以,使用您的示例:
In [7]: a = numpy.datetime64('1995-12-31') : b = pandas.Timestamp(a) + pandas.DateOffset(months=1) : b Out[7]: Timestamp('1996-01-31 00:00:00')
NB:如果需要将
to_numpy
转换为pandas.Timestamp
,则可以始终使用numpy.datetime64
方法。
您可以替换day
部分来模仿需求。
由于每个月的时长不一,因此在时间中加上“月”存在固有的歧义。
如果可能的话,添加一个月的简明方法将天保持不变,将其截断为几个月,再加上1,然后读取被截断的内容: