使用日期时间 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))}
或者如果 arrays
是 list
就足够了,只需将时间间隔迭代为
arrays = []
for i in (1, 1/24, 1/1440):
arrays.append(np.arange(start, end, timedelta(i)).astype(datetime))
我想知道如何使这三个语句成为我循环遍历的单个语句:
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))}
或者如果 arrays
是 list
就足够了,只需将时间间隔迭代为
arrays = []
for i in (1, 1/24, 1/1440):
arrays.append(np.arange(start, end, timedelta(i)).astype(datetime))