pandas:bdate_range首先将星期日定为星期几

时间:2016-05-14 06:22:21

标签: python pandas calendar

有没有办法让周日到周四的营业日期范围被视为营业日和

示例输出:

>>> import pandas as pd
>>> pd.bdate_range('2016-5-10','2016-5-17')
DatetimeIndex(['2016-05-10', '2016-05-11', '2016-05-12', '2016-05-13',
           '2016-05-16', '2016-05-17'],
          dtype='datetime64[ns]', freq='B')

期望的输出:

DatetimeIndex(['2016-05-10', '2016-05-11', '2016-05-12', '2016-05-15',
           '2016-05-16', '2016-05-17'],
          dtype='datetime64[ns]', freq='B')

2 个答案:

答案 0 :(得分:0)

您可以使用custom business days

weekmask = 'Sun Mon Tue Wed Thu'
custombday = pd.offsets.CustomBusinessDay(weekmask=weekmask)

print pd.bdate_range('2016-5-10','2016-5-17', freq=custombday)

DatetimeIndex(['2016-05-10', '2016-05-11', '2016-05-12', '2016-05-15',
               '2016-05-16', '2016-05-17'],
              dtype='datetime64[ns]', freq='C')

答案 1 :(得分:0)

您可以过滤掉不想要的日子:

dates=pd.date_range('2016-5-10','2016-5-17').to_frame(name='d')  # convert to frame so we can run query on it
dates.query('d.dt.strftime("%a") not in ["Fri","Sat"]').index

输出:
DatetimeIndex(['2016-05-10', '2016-05-11', '2016-05-12', '2016-05-15',
               '2016-05-16', '2016-05-17'],
              dtype='datetime64[ns]', freq=None)

在这里,我正在使用查询进行过滤。您会发现仅选择所需的日期很容易,而不是过滤掉。

关于代码-
d.dt.strftime("%a")

它将仅将时间戳记作为日期名称,例如Sun Mon.。