如何生成 pandas 频率范围为周二到周六(含)的日期范围?
How can I generate a pandas date range with a frequency of Tue to Sat inclusive?
我正在尝试使用 pandas 生成具有自定义每日频率的日期时间索引。
目前,我可以生成以下日期时间索引:
import pandas as pd
import datetime as dt
pd.date_range(start=dt.datetime(2020,8,28),end=dt.datetime(2020,9,30),freq='B')
DatetimeIndex(['2020-08-28', '2020-08-31', '2020-09-01', '2020-09-02',
'2020-09-03', '2020-09-04', '2020-09-07', '2020-09-08',
'2020-09-09', '2020-09-10', '2020-09-11', '2020-09-14',
'2020-09-15', '2020-09-16', '2020-09-17', '2020-09-18',
'2020-09-21', '2020-09-22', '2020-09-23', '2020-09-24',
'2020-09-25', '2020-09-28', '2020-09-29', '2020-09-30'],
dtype='datetime64[ns]', freq='B')
但是,这 return 是所有工作日。我想 return 所有星期二、星期三、星期四、星期五和星期六。也许这可以通过某种自定义设置或某种偏移来完成?具体来说,有没有办法直接使用 date_range 功能和 freq 输入来做到这一点?如果没有,如何实现最简单?
谢谢!
您可以使用 Timedelta
添加一天,但要不更改您想要的日期范围,您需要在创建边界时删除一天。
(pd.date_range(start=dt.datetime(2020,8,27),end=dt.datetime(2020,9,29),freq='B')
+ pd.Timedelta(days=1))
DatetimeIndex(['2020-08-28', '2020-08-29', '2020-09-01', '2020-09-02',
'2020-09-03', '2020-09-04', '2020-09-05', '2020-09-08',
'2020-09-09', '2020-09-10', '2020-09-11', '2020-09-12',
'2020-09-15', '2020-09-16', '2020-09-17', '2020-09-18',
'2020-09-19', '2020-09-22', '2020-09-23', '2020-09-24',
'2020-09-25', '2020-09-26', '2020-09-29', '2020-09-30'],
dtype='datetime64[ns]', freq=None)
编辑:您还可以定义您的 CustomBusinessDay
cbd = pd.tseries.offsets.CustomBusinessDay(weekmask='Tue Wed Thu Fri Sat')
pd.date_range(start=dt.datetime(2020,8,28),end=dt.datetime(2020,9,30),freq=cbd)
与dayofweek
idx = pd.date_range(start=dt.datetime(2020,8,28),end=dt.datetime(2020,9,30))
s = idx.dayofweek
idx[s.isin([2,3,4,5])]
DatetimeIndex(['2020-08-28', '2020-08-29', '2020-09-02', '2020-09-03',
'2020-09-04', '2020-09-05', '2020-09-09', '2020-09-10',
'2020-09-11', '2020-09-12', '2020-09-16', '2020-09-17',
'2020-09-18', '2020-09-19', '2020-09-23', '2020-09-24',
'2020-09-25', '2020-09-26', '2020-09-30'],
dtype='datetime64[ns]', freq=None)
我正在尝试使用 pandas 生成具有自定义每日频率的日期时间索引。
目前,我可以生成以下日期时间索引:
import pandas as pd
import datetime as dt
pd.date_range(start=dt.datetime(2020,8,28),end=dt.datetime(2020,9,30),freq='B')
DatetimeIndex(['2020-08-28', '2020-08-31', '2020-09-01', '2020-09-02',
'2020-09-03', '2020-09-04', '2020-09-07', '2020-09-08',
'2020-09-09', '2020-09-10', '2020-09-11', '2020-09-14',
'2020-09-15', '2020-09-16', '2020-09-17', '2020-09-18',
'2020-09-21', '2020-09-22', '2020-09-23', '2020-09-24',
'2020-09-25', '2020-09-28', '2020-09-29', '2020-09-30'],
dtype='datetime64[ns]', freq='B')
但是,这 return 是所有工作日。我想 return 所有星期二、星期三、星期四、星期五和星期六。也许这可以通过某种自定义设置或某种偏移来完成?具体来说,有没有办法直接使用 date_range 功能和 freq 输入来做到这一点?如果没有,如何实现最简单?
谢谢!
您可以使用 Timedelta
添加一天,但要不更改您想要的日期范围,您需要在创建边界时删除一天。
(pd.date_range(start=dt.datetime(2020,8,27),end=dt.datetime(2020,9,29),freq='B')
+ pd.Timedelta(days=1))
DatetimeIndex(['2020-08-28', '2020-08-29', '2020-09-01', '2020-09-02',
'2020-09-03', '2020-09-04', '2020-09-05', '2020-09-08',
'2020-09-09', '2020-09-10', '2020-09-11', '2020-09-12',
'2020-09-15', '2020-09-16', '2020-09-17', '2020-09-18',
'2020-09-19', '2020-09-22', '2020-09-23', '2020-09-24',
'2020-09-25', '2020-09-26', '2020-09-29', '2020-09-30'],
dtype='datetime64[ns]', freq=None)
编辑:您还可以定义您的 CustomBusinessDay
cbd = pd.tseries.offsets.CustomBusinessDay(weekmask='Tue Wed Thu Fri Sat')
pd.date_range(start=dt.datetime(2020,8,28),end=dt.datetime(2020,9,30),freq=cbd)
与dayofweek
idx = pd.date_range(start=dt.datetime(2020,8,28),end=dt.datetime(2020,9,30))
s = idx.dayofweek
idx[s.isin([2,3,4,5])]
DatetimeIndex(['2020-08-28', '2020-08-29', '2020-09-02', '2020-09-03',
'2020-09-04', '2020-09-05', '2020-09-09', '2020-09-10',
'2020-09-11', '2020-09-12', '2020-09-16', '2020-09-17',
'2020-09-18', '2020-09-19', '2020-09-23', '2020-09-24',
'2020-09-25', '2020-09-26', '2020-09-30'],
dtype='datetime64[ns]', freq=None)