Skip to main content
 首页 » 编程设计

python之在不使用 for 循环的情况下增加日期时间数组的年份

2025年05月04日22davidwang456

我有一个 numpy 数组,其中包含一长串日期时间。我想知道有没有一种方法可以在不使用 for 循环的情况下一次为数组的所有值添加一年?例如。使用一些 numpy 或 datetime 模块?

>>> import datetime 
>>> import numpy as np 
 
>>> dts.shape 
(64580,) 
 
>>> dts[:5] 
array([datetime.date(2000, 1, 15), datetime.date(2000, 1, 15), 
       datetime.date(2000, 1, 15), datetime.date(2000, 1, 15), 
       datetime.date(2000, 1, 15)], dtype=object) 
 
>>> new_dts = somemodule.somefunctionforaddingyearorsomething(dts, year=1) 
>>> new_dts 
array([datetime.date(2001, 1, 15), datetime.date(2001, 1, 15), 
       datetime.date(2001, 1, 15), datetime.date(2001, 1, 15), 
       datetime.date(2001, 1, 15)], dtype=object) 

注意:每个日期的第几天始终设置为第 15 天,因为日期代表月平均数据。

我已经使用 for 循环实现了它,但是这在计算上可能很慢..

代码在这里:

def add_year_to_Datelist(dl): 
 
dts = dl.dates.copy() 
for idx, date in enumerate(dts): 
    dts[idx] = date.replace(year=date.year + 1) 
 
dl.set_dates(dts) 
return dl 

干杯

请您参考如下方法:

NumPy 不支持“1 年”作为时间增量,因为它可以是 365 或 366 天。如果愿意用Pandas,可以用pd.to_datetime与 pd.DateOffset ,确实支持基于年份的抵消:

import datetime, numpy as np, pandas as pd 
 
dts = np.array([datetime.date(2000, 1, 15), datetime.date(2000, 1, 15), 
                datetime.date(2000, 1, 15), datetime.date(2000, 1, 15), 
                datetime.date(2000, 1, 15)], dtype=object) 
 
dts = (pd.to_datetime(dts) + pd.DateOffset(years=1)).values.astype('datetime64[D]') 
 
# array(['2001-01-15', '2001-01-15', '2001-01-15', '2001-01-15', 
#        '2001-01-15'], dtype='datetime64[D]') 

使用 NumPy,您可以在将 object dtype 数组转换为 np.datetime64 后添加固定天数:

dts = dts.astype(np.datetime64) + np.timedelta64(365, 'D') 
 
# array(['2001-01-14', '2001-01-14', '2001-01-14', '2001-01-14', 
#        '2001-01-14'], dtype='datetime64[D]') 

请注意两个结果之间存在 1 天的不匹配。