gpt4 book ai didi

python - 使用 Python 中的日期列表在 24 小时内循环

转载 作者:行者123 更新时间:2023-11-28 22:18:00 26 4
gpt4 key购买 nike

我在 Python 中有一个 np.datetime64 日期列表:

['2016-12-01T02:00:00.000000000', '2016-12-01T04:00:00.000000000',
'2016-12-01T06:00:00.000000000', '2016-12-01T08:00:00.000000000',
'2016-12-01T10:00:00.000000000', '2016-12-01T12:00:00.000000000',
'2016-12-01T14:00:00.000000000', '2016-12-01T16:00:00.000000000',
'2016-12-01T18:00:00.000000000', '2016-12-01T20:00:00.000000000',
'2016-12-01T22:00:00.000000000', '2016-12-02T00:00:00.000000000',
'2016-12-02T02:00:00.000000000', '2016-12-02T04:00:00.000000000',
'2016-12-02T06:00:00.000000000', '2016-12-02T08:00:00.000000000',
'2016-12-02T10:00:00.000000000', '2016-12-02T12:00:00.000000000',
'2016-12-02T14:00:00.000000000', '2016-12-02T16:00:00.000000000',
'2016-12-02T18:00:00.000000000', '2016-12-02T20:00:00.000000000',
'2016-12-02T22:00:00.000000000', '2016-12-03T00:00:00.000000000',
'2016-12-03T02:00:00.000000000', '2016-12-03T04:00:00.000000000',
'2016-12-03T06:00:00.000000000', '2016-12-03T08:00:00.000000000',
'2016-12-03T10:00:00.000000000', '2016-12-03T12:00:00.000000000',
'2016-12-03T14:00:00.000000000', '2016-12-03T16:00:00.000000000',
'2016-12-03T18:00:00.000000000', '2016-12-03T20:00:00.000000000',
'2016-12-03T22:00:00.000000000']

并且我希望循环遍历列表中的每个日历日。我试图从列表中提取每个唯一日期(即找到最小和最大日期并在它们之间创建日期列表)但这不是我想要做的事情的理想选择。

我想要的结果是拥有允许我遍历列表中找到的每个日期/日历日并获取与该日期对应的日期时间的代码:

for each_date in date_list:
***get all datetimes corresponding to each_date***

(loop would occur 3 times in this example)

注意:

1) 迭代每个 [n:n+24] 或任何不起作用的解决方案,因为不是每天都会有相同数量的时间步长。

最佳答案

如果时间戳是有序的,我们可以使用itertools.groupby函数按相应的日期对数组的元素进行分组。

日期可以通过np.datetime64.astype(..., dtype='datetime64[D]')获取,所以我们可以这样写:

from numpy import datetime64
from functools import partial
from itertools import groupby

for day, timestamps in <b>groupby(data_array,
partial(datetime64.astype, dtype='datetime64[D]'))</b>:
# process day and timestamps
pass

这里 day 是一个 datetime64[D] numpy 对象(它只包含日期),timestamps 是一个可迭代对象 相应时间戳的(不是列表,但我们可以将其转换为列表)。 data_array 是包含初始数据的数组。

例如:

>>> for day, timestamps in groupby(data_array,
... partial(datetime64.astype, dtype='datetime64[D]')):
... print((day, list(timestamps)))
...
(numpy.datetime64('2016-12-01'), [numpy.datetime64('2016-12-01T02:00:00.000000000'), numpy.datetime64('2016-12-01T04:00:00.000000000'), numpy.datetime64('2016-12-01T06:00:00.000000000'), numpy.datetime64('2016-12-01T08:00:00.000000000'), numpy.datetime64('2016-12-01T10:00:00.000000000'), numpy.datetime64('2016-12-01T12:00:00.000000000'), numpy.datetime64('2016-12-01T14:00:00.000000000'), numpy.datetime64('2016-12-01T16:00:00.000000000'), numpy.datetime64('2016-12-01T18:00:00.000000000'), numpy.datetime64('2016-12-01T20:00:00.000000000'), numpy.datetime64('2016-12-01T22:00:00.000000000')])
(numpy.datetime64('2016-12-02'), [numpy.datetime64('2016-12-02T00:00:00.000000000'), numpy.datetime64('2016-12-02T02:00:00.000000000'), numpy.datetime64('2016-12-02T04:00:00.000000000'), numpy.datetime64('2016-12-02T06:00:00.000000000'), numpy.datetime64('2016-12-02T08:00:00.000000000'), numpy.datetime64('2016-12-02T10:00:00.000000000'), numpy.datetime64('2016-12-02T12:00:00.000000000'), numpy.datetime64('2016-12-02T14:00:00.000000000'), numpy.datetime64('2016-12-02T16:00:00.000000000'), numpy.datetime64('2016-12-02T18:00:00.000000000'), numpy.datetime64('2016-12-02T20:00:00.000000000'), numpy.datetime64('2016-12-02T22:00:00.000000000')])
(numpy.datetime64('2016-12-03'), [numpy.datetime64('2016-12-03T00:00:00.000000000'), numpy.datetime64('2016-12-03T02:00:00.000000000'), numpy.datetime64('2016-12-03T04:00:00.000000000'), numpy.datetime64('2016-12-03T06:00:00.000000000'), numpy.datetime64('2016-12-03T08:00:00.000000000'), numpy.datetime64('2016-12-03T10:00:00.000000000'), numpy.datetime64('2016-12-03T12:00:00.000000000'), numpy.datetime64('2016-12-03T14:00:00.000000000'), numpy.datetime64('2016-12-03T16:00:00.000000000'), numpy.datetime64('2016-12-03T18:00:00.000000000'), numpy.datetime64('2016-12-03T20:00:00.000000000'), numpy.datetime64('2016-12-03T22:00:00.000000000')])

所以对于每一天,我们都选择打印相应的 timestamps 列表,但这当然是一个选项。如示例所示,并非所有切片都具有相同的长度(最后两个有一个额外的元素)

请注意,timestamps 是一个迭代器,因此会耗尽,如果您不将其转换为列表,那么在一个循环之后,迭代器将耗尽

groupby 在线性时间内工作,因为每次它检查“组键”是否与前一个元素相同,但如前所述,约束是数据必须排序。

关于python - 使用 Python 中的日期列表在 24 小时内循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50871693/

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