在Python中生成一个小时:分钟列表

3

我将尝试为您翻译一段关于IT技术的内容。要翻译的内容是生成一个从上午9:30到下午4:00的numpy分钟数组。(6.5小时*60分钟=390个元素)

是否有类似以下代码的方法:

import pandas as pd
pd.date_range("09:30", "16:00", freq="1min")

当然,在将其转换为numpy后很容易...
4个回答

4

我相信你需要使用DatetimeIndex.strftime

a = pd.date_range("09:30", "16:00", freq="1min").strftime('%H:%M')
print (a[:10])
['09:30' '09:31' '09:32' '09:33' '09:34' '09:35' '09:36' '09:37' '09:38'
 '09:39']

0

试试这个:

t = np.arange(datetime.datetime(2018,3,12,9,30), datetime.datetime(2018,3,12,16,0), datetime.timedelta(hours=1)).astype(datetime.datetime)

0

numpy 中没有太高级的日期/时间管理功能,但是借助于标准模块 datetime,自己编写并不是太难。

一种实现方式如下:

import datetime

def date_range(
        begin_time,
        end_time,
        step_time,
        in_date_fmt='%H:%M',
        out_date_fmt=None,
        upper_bound=False):
    if out_date_fmt is None:
        out_date_fmt = in_date_fmt 

    begin_time = datetime.datetime.strptime(begin_time, in_date_fmt)
    end_time = datetime.datetime.strptime(end_time, in_date_fmt)

    delta_time = (end_time - begin_time)
    origin_time = datetime.datetime.strptime('0', '%S')
    step_time = (
        datetime.datetime.strptime(step_time, in_date_fmt) - origin_time)

    if upper_bound:
        upper_bound = step_time.seconds

    for i in range(0, delta_time.seconds + upper_bound, step_time.seconds):
       yield (
           begin_time + 
           datetime.timedelta(seconds=i)).strftime(out_date_fmt)

可以这样使用:

my_date_range = np.array(list(date_range('09:30', '16:00', '00:01')))

文档字符串留给读者练习;-)

当然,如果您可以使用 pandas,您应该真正使用它,而不是发明另一个轮子™


0
你可以使用np.datetime64。但是它也需要提供年-月-日的信息。
r = np.arange('0000-01-01T09:30', '0000-01-01T16:00', dtype='M8')
r
# array(['0000-01-01T09:30', '0000-01-01T09:31', '0000-01-01T09:32',
#        '0000-01-01T09:33', '0000-01-01T09:34', '0000-01-01T09:35',
#         ...
#        '0000-01-01T15:54', '0000-01-01T15:55', '0000-01-01T15:56',
#        '0000-01-01T15:57', '0000-01-01T15:58', '0000-01-01T15:59'],
#       dtype='datetime64[m]')

你可以通过减去日期来消除它,但是得到的 np.timedelta64 会显示为分钟。

d = r - r[0].astype('M8[D]')
d
# array([570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582,
#        583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595,
#        ...
#        934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946,
#        947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959],
#       dtype='timedelta64[m]')

虽然可以提取小时数:

>> d.astype('m8[h]')
# array([ 9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,
#         9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9, 10, 10, 10, 10,
#         ...

#        15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
#        15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15],
#       dtype='timedelta64[h]')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接