我将尝试为您翻译一段关于IT技术的内容。要翻译的内容是生成一个从上午9:30到下午4:00的numpy分钟数组。(6.5小时*60分钟=390个元素)
是否有类似以下代码的方法:
import pandas as pd
pd.date_range("09:30", "16:00", freq="1min")
当然,在将其转换为numpy后很容易...
我将尝试为您翻译一段关于IT技术的内容。要翻译的内容是生成一个从上午9:30到下午4:00的numpy分钟数组。(6.5小时*60分钟=390个元素)
是否有类似以下代码的方法:
import pandas as pd
pd.date_range("09:30", "16:00", freq="1min")
我相信你需要使用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']
试试这个:
t = np.arange(datetime.datetime(2018,3,12,9,30), datetime.datetime(2018,3,12,16,0), datetime.timedelta(hours=1)).astype(datetime.datetime)
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
,您应该真正使用它,而不是发明另一个轮子™。
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]')