Python pd.date\U范围如何排除几个小时

Python pd.date\U范围如何排除几个小时,python,pandas,date-range,Python,Pandas,Date Range,嗨,伙计,我有一个关于使用pd.date\u range()的问题。我正在做ARIMA模型,我需要在一个步骤中预测一些价格值。例如,在2021-01-04 11:20。我想用freq='5Min'生成下一个4日期索引,所以我编写了以下代码 pd.date_range(start = '2021-01-04 11:20', periods = 5, freq = '5Min') 这就给了 ['2021-01-04 11:20', '2021-01-04 11:25', '2021-01-04 1

嗨,伙计,我有一个关于使用pd.date\u range()的问题。我正在做ARIMA模型,我需要在一个步骤中预测一些价格值。例如,在2021-01-04 11:20。我想用freq='5Min'生成下一个4日期索引,所以我编写了以下代码

pd.date_range(start = '2021-01-04 11:20', periods = 5, freq = '5Min')
这就给了

['2021-01-04 11:20', '2021-01-04 11:25', '2021-01-04 11:30', '2021-01-04 11:35', '2021-01-04 11:40']
但市场在下午开放。因此,11:30之后,市场将在2021-01-04 15:00开盘,因此该系列应该是

['2021-01-04 11:20', '2021-01-04 11:25', '2021-01-04 15:00', '2021-01-04 15:05', '2021-01-04 15:10'].
那么,如何定制频率,以便在一天中排除一些“小时范围”


谢谢!我真的很感激

我不知道你还面临着什么时间限制,但你能不能用一个条件和一个列表来调整它?我不相信
pd.date\u range
有任何默认参数可以满足您的要求

# setup
dt_range = pd.date_range(start = '2021-01-04 11:20', periods = 5, freq = '5Min')
# time condition
market_open = "11:30"
# list comprehension
dt_range = [time + pd.DateOffset(hours=3, minutes=30) if time.strftime('%H:%M') >= market_open else time for time in dt_range]
# convert back to panda time series
dt_range = pd.to_datetime(dt_range)

print(dt_range)
输出:

DatetimeIndex(['2021-01-04 11:20:00', '2021-01-04 11:25:00',
               '2021-01-04 15:00:00', '2021-01-04 15:05:00',
               '2021-01-04 15:10:00'],
              dtype='datetime64[ns]', freq=None)
用于位置,然后通过输入过滤掉该值:

另一个想法是使用面具:

from datetime import time

r = pd.date_range(start = '2021-01-04 00:00', periods = 100, freq = '30Min')

m = ((r.time > time(hour=9, minute=0)) & (r.time < time(hour=11, minute=30)) |
     (r.time > time(hour=13, minute=30)) & (r.time < time(hour=15, minute=0)) |
     (r.time > time(hour=21, minute=0)) & (r.time < time(hour=23, minute=0)))
       
print (m)

out = r[m]
print (out)
DatetimeIndex(['2021-01-04 09:30:00', '2021-01-04 10:00:00',
               '2021-01-04 10:30:00', '2021-01-04 11:00:00',
               '2021-01-04 14:00:00', '2021-01-04 14:30:00',
               '2021-01-04 21:30:00', '2021-01-04 22:00:00',
               '2021-01-04 22:30:00', '2021-01-05 09:30:00',
               '2021-01-05 10:00:00', '2021-01-05 10:30:00',
               '2021-01-05 11:00:00', '2021-01-05 14:00:00',
               '2021-01-05 14:30:00', '2021-01-05 21:30:00',
               '2021-01-05 22:00:00', '2021-01-05 22:30:00'],
              dtype='datetime64[ns]', freq=None)

伙计,这太好了!我确实有其他范围需要做,但至少我现在有一个方向!!!谢谢哇!另一个好方法!!该死的,那是诺伊斯,谢谢!!如果我有另一个范围呢?例如:11:30-13:30、15:00-21:00、23:00-09:00所有这些日期都应忽略,我需要在索引中设置不同的条件。注释在哪里?@FrankData-答案已编辑。
from datetime import time

r = pd.date_range(start = '2021-01-04 00:00', periods = 100, freq = '30Min')

m = ((r.time > time(hour=9, minute=0)) & (r.time < time(hour=11, minute=30)) |
     (r.time > time(hour=13, minute=30)) & (r.time < time(hour=15, minute=0)) |
     (r.time > time(hour=21, minute=0)) & (r.time < time(hour=23, minute=0)))
       
print (m)

out = r[m]
print (out)
DatetimeIndex(['2021-01-04 09:30:00', '2021-01-04 10:00:00',
               '2021-01-04 10:30:00', '2021-01-04 11:00:00',
               '2021-01-04 14:00:00', '2021-01-04 14:30:00',
               '2021-01-04 21:30:00', '2021-01-04 22:00:00',
               '2021-01-04 22:30:00', '2021-01-05 09:30:00',
               '2021-01-05 10:00:00', '2021-01-05 10:30:00',
               '2021-01-05 11:00:00', '2021-01-05 14:00:00',
               '2021-01-05 14:30:00', '2021-01-05 21:30:00',
               '2021-01-05 22:00:00', '2021-01-05 22:30:00'],
              dtype='datetime64[ns]', freq=None)
ind1 = (np.r_[r.indexer_between_time('9:00','11:30', include_start=False, include_end=False),
              r.indexer_between_time('13:30','15:00', include_start=False, include_end=False),
              r.indexer_between_time('21:00','23:00', include_start=False, include_end=False)])

out = r[ind1]
print (out)
DatetimeIndex(['2021-01-04 09:30:00', '2021-01-04 10:00:00',
               '2021-01-04 10:30:00', '2021-01-04 11:00:00',
               '2021-01-05 09:30:00', '2021-01-05 10:00:00',
               '2021-01-05 10:30:00', '2021-01-05 11:00:00',
               '2021-01-04 14:00:00', '2021-01-04 14:30:00',
               '2021-01-05 14:00:00', '2021-01-05 14:30:00',
               '2021-01-04 21:30:00', '2021-01-04 22:00:00',
               '2021-01-04 22:30:00', '2021-01-05 21:30:00',
               '2021-01-05 22:00:00', '2021-01-05 22:30:00'],
              dtype='datetime64[ns]', freq=None)