向带有timedelta的datetime64添加一个月

问题描述 投票:0回答:5

当我尝试这个时:

>>> a = numpy.datetime64('1995-12-31')
>>> b = a + pandas.Timedelta(1, unit='M')
>>> print(b)

我希望看到

1996-01-31

但是我却得到了

1996-01-30 10:29:06.

知道为什么吗?非常感谢。

python pandas numpy timedelta
5个回答
1
投票

一个月的时间增量是一年的长度除以12。

您需要检查您的日期并添加适当的天数。或者,增加月份数(如果需要,可以滚动到下一年),并保持天数不变。


1
投票

正如他在回答中提到的@hpaulj:

由于每个月的时长不一,因此在时间中加上“月”存在固有的歧义。

此外,在0.25.0版本中,Pandas dropped support用于在M功能中使用单位Y(月)和Timedelta(年)。

但是正如官方熊猫guide所述,对于绝对持续时间,您应该使用Timedelta,对于尊重日历算术的相对持续时间,请使用DateOffset,这正是我们在您的情况下所需要的:] >

基本DateOffset

的作用类似于dateutil.relativedeltarelativedelta 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方法。


0
投票

您可以替换day部分来模仿需求。


0
投票

由于每个月的时长不一,因此在时间中加上“月”存在固有的歧义。


0
投票

如果可能的话,添加一个月的简明方法将天保持不变,将其截断为几个月,再加上1,然后读取被截断的内容:

© www.soinside.com 2019 - 2024. All rights reserved.