gpt4 book ai didi

python - 如何在 numpy 的日期中模糊添加年份?

转载 作者:太空宇宙 更新时间:2023-11-04 03:03:17 24 4
gpt4 key购买 nike

我理解为什么不能将年/月 timedelta64 添加到一天中,因为月或年可能有不同的天数。但我希望将工作日期增加一年,因为所有必要的信息都可用。唉,我很难过:

import numpy as np

print(np.datetime64("2015-06-01") + np.timedelta64(1, "Y"))

# TypeError: Cannot get a common metadata divisor for NumPy datetime metadata [D] and [Y] because they have incompatible nonlinear base time units

如何让它发挥作用?

编辑:

重复问题的答案不合适。我希望尽我所能,忽略极端情况。我正在尝试获得不错的日期标记,所以不精确也没关系。

如果需要,可以将 datetime64[D] 向下转换为 datetime64[M]。

最佳答案

这根本行不通,至少不能单独使用 numpy。

天、时、分、秒都可以转换,因为它们有兼容的基本单位。一分钟总是 60 秒,一小时总是 60 分钟,一天总是 24 小时。

年和月被特殊对待,因为它们代表的时间长短取决于它们的使用时间。虽然 timedelta 天单位相当于 24 小时,但无法将月单位转换为天,因为不同的月份有不同的天数。推而广之,也无法将年数转换为天数。

为了适本地实现这一点,您需要决定如何解决闰年等冲突。这不是单独使用 numpy 可以完成的事情。算术处理 numpy.datetime64 对象的方式与其他库不同,as mentioned in the documents , 无法在天数和月数之间转换。

普通的 datetimerelativedelta 可以工作,因为这些库已经将此类冲突的行为编纂成文。

from dateutil.relativedelta import relativedelta
from datetime import datetime
datetime(2016, 2, 29) + relativedelta(years=1)
#datetime.datetime(2017, 2, 28, 0, 0)

所以,如果您喜欢这些日期时间库的排序方式……像这样的东西会让您得到结果……

from datetime import datetime
from dateutil.relativedelta import relativedelta
import numpy as np
def fuzzy_add(npdt, years):
year, month, day = str(npdt).split("-")
d = datetime(int(year), int(month), int(day))
delta = relativedelta(years=years)
the_date = d + delta
new_npdt = np.datetime64(the_date.isoformat()[:10])
return new_npdt

例子:

fuzzy_add(np.datetime64("2016-02-29"), 1)
#numpy.datetime64('2017-02-28')

关于python - 如何在 numpy 的日期中模糊添加年份?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40290688/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com