如何确定python中该月的第一个营业日期?我正在编写的程序在每个循环中都滴灌日期,因此我需要能够获得true / false。
我发现您可以通过以下方式获得上一个工作日的工作:
import pandas as pd
pd.date_range("2014-01-14", periods=1, freq='BM')
Run Code Online (Sandbox Code Playgroud)
谢谢
我认为,您可以使用以下方法获得本月的第一个商务日期BMS:
In[82]:pd.date_range('1/1/2000', '12/1/2000', freq='BMS')
Out[82]:
DatetimeIndex(['2000-01-03', '2000-02-01', '2000-03-01', '2000-04-03',
'2000-05-01', '2000-06-01', '2000-07-03', '2000-08-01',
'2000-09-01', '2000-10-02', '2000-11-01', '2000-12-01'],
dtype='datetime64[ns]', freq='BMS', tz=None)
Run Code Online (Sandbox Code Playgroud)
这使用美国联邦假日日历。它使用列表推导式遍历介于start_date和之间的月份的每个第一个工作日end_date,然后在属于美国联邦假日或周末的某个天增加一个日期,直到找到有效的工作日期为止。
import datetime as dt
import pandas as pd
from pandas.tseries.holiday import USFederalHolidayCalendar
cal = USFederalHolidayCalendar()
start_date = '2015-1-1'
end_date = '2015-12-31'
def get_business_day(date):
while date.isoweekday() > 5 or date in cal.holidays():
date += dt.timedelta(days=1)
return date
>>> first_bday_of_month = [get_business_day(d).date()
for d in pd.date_range(start_date, end_date, freq='BMS')]
[datetime.date(2015, 1, 2),
datetime.date(2015, 2, 2),
datetime.date(2015, 3, 2),
datetime.date(2015, 4, 1),
datetime.date(2015, 5, 1),
datetime.date(2015, 6, 1),
datetime.date(2015, 7, 1),
datetime.date(2015, 8, 3),
datetime.date(2015, 9, 1),
datetime.date(2015, 10, 1),
datetime.date(2015, 11, 2),
datetime.date(2015, 12, 1)]
>>> cal.rules
cal.rules
[Holiday: New Years Day (month=1, day=1, observance=<function nearest_workday at 0x10c593578>),
Holiday: Dr. Martin Luther King Jr. (month=1, day=1, offset=<DateOffset: kwds={'weekday': MO(+3)}>),
Holiday: Presidents Day (month=2, day=1, offset=<DateOffset: kwds={'weekday': MO(+3)}>),
Holiday: MemorialDay (month=5, day=31, offset=<DateOffset: kwds={'weekday': MO(-1)}>),
Holiday: July 4th (month=7, day=4, observance=<function nearest_workday at 0x10c593578>),
Holiday: Labor Day (month=9, day=1, offset=<DateOffset: kwds={'weekday': MO(+1)}>),
Holiday: Columbus Day (month=10, day=1, offset=<DateOffset: kwds={'weekday': MO(+2)}>),
Holiday: Veterans Day (month=11, day=11, observance=<function nearest_workday at 0x10c593578>),
Holiday: Thanksgiving (month=11, day=1, offset=<DateOffset: kwds={'weekday': TH(+4)}>),
Holiday: Christmas (month=12, day=25, observance=<function nearest_workday at 0x10c593578>)]
Run Code Online (Sandbox Code Playgroud)