使用日期时间 timedelta 函数

Using the datetime timedelta function

我想知道如何使这三个语句成为我循环遍历的单个语句:

minute_dt_array = np.arange(start, end, dt.timedelta(minutes=1)).astype(dt.datetime)
hour_dt_array = np.arange(start, end, dt.timedelta(hours=1)).astype(dt.datetime)
day_dt_array = np.arange(start, end, dt.timedelta(days=1)).astype(dt.datetime)

如果我想创建一个 [分钟、天、小时] 的列表,这样我就可以遍历单个语句,而不是将它写三次。我该怎么做?

例如,我想编写一个循环来执行如下操作:

timeunits = ['day','hour','minute']
for interval in timeunits:
    arrays['%s_array' % interval] = np.arange(start, end, dt.timedelta(**interval**=1)).astype(dt.datetime)
      

但是我不知道在时间增量函数中放什么。

没有必要像你的间隔那样做:

1d = 24h = 1440 分钟

所以,每 60 分钟你有 1 小时,每 24 小时你有 1 天。

当你按照你的建议组合间隔时,你会得到重复的数据点,以获得 1 小时的时间增量分辨率,甚至是每日分辨率的三倍。所以,使用第一个粒度应该就足够了,只需检查你是否得到了分钟数、小时数的整数:

minute_dt_array = np.arange(start, end, dt.timedelta(minutes=1)).astype(dt.datetime)
the_list = []
for n, dtt in enumerate(minute_dt_array):
    the_list.append([n // 1440, n // 60, n]) # days, hours, minutes 

the_list就是你所需要的。

如果你希望能够通过名称调用数组,那么一个zip来填充一个dict怎么样?

from datetime import datetime, timedelta
import numpy as np

start, end = datetime(2020,11,20), datetime(2020,11,22)
arrays = dict()
for k, i in zip(('days','hours','minutes'), (1, 1/24, 1/1440)):
    arrays[k] = np.arange(start, end, timedelta(i)).astype(datetime)

# one-liner:
# arrays = {k: np.arange(start, end, timedelta(i)).astype(datetime) for k, i in zip(('days','hours','minutes'), (1, 1/24, 1/1440))}

或者如果 arrayslist 就足够了,只需将时间间隔迭代为

arrays = []    
for i in (1, 1/24, 1/1440):
    arrays.append(np.arange(start, end, timedelta(i)).astype(datetime))