python:日期必须是该月的第一周和第三周
python: date has to be 1st and 3rd week of the month
我正在 运行 检查数据框中的日期。它们应该始终是:
- 一个。每个月的第一个和第三个星期一,
- 乙。除非周一是节假日,否则就是周一的下周二。
日期一直追溯到 2012 年。
我的计划是首先建立第一个和第三个星期一的日期列表,如果恰逢银行假期,则将日期调整一天。然后检查数据框中的日期,如果列值不在列表中则创建错误。
我编写了以下代码来创建日期列表,但是当我尝试检查日期是否为联邦假日时出现错误。我做错了什么?
# import pendulum
from pandas.tseries.holiday import USFederalHolidayCalendar as holcalendar
from datetime import timedelta, date
yrstart = 2012
mthstart = 1
yrend = datetime.now().year
mthnow = datetime.now().month
c = calendar.Calendar(firstweekday=calendar.SUNDAY)
today = datetime.today().date()
dr = pd.date_range(start='2012-01-01', end=today)
cal = holcalendar()
hols = cal.holidays(start=dr.min(), end=dr.max()).tolist()
ldates = []
for yr in range(yrstart, yrend+1):
if yr == yrend:
mthend = mthnow
else:
mthend = 12
for mth in range(mthstart, mthend+1):
mthcal = c.monthdatescalendar(yr,mth)
date = [day for week in mthcal for day in week if \
day.weekday() == calendar.MONDAY and \
day.month == mth][0]
if date.isin(hols):
date = date + + timedelta(days=1)
ldates.append(date)
date = [day for week in mthcal for day in week if \
day.weekday() == calendar.MONDAY and \
day.month == mth][2]
if date.isin(hols):
date = date + + timedelta(days=1)
ldates.append(date)
输出:
print(hols)
[Timestamp('2012-01-02 00:00:00'),
Timestamp('2012-01-16 00:00:00'),
Timestamp('2012-02-20 00:00:00'),
Timestamp('2012-05-28 00:00:00'),
Timestamp('2012-07-04 00:00:00'),
Timestamp('2012-09-03 00:00:00'),
Timestamp('2012-10-08 00:00:00'),
Timestamp('2012-11-12 00:00:00'),..
...Timestamp('2021-01-01 00:00:00'),
Timestamp('2021-01-18 00:00:00'),
Timestamp('2021-02-15 00:00:00'),
Timestamp('2021-05-31 00:00:00'),
Timestamp('2021-07-05 00:00:00')]
print(date)
datetime.date(2012, 1, 2)
错误:AttributeError:'datetime.date'对象没有属性'isin'
最后这个很容易解决。在这里留下答案给其他卡住的人。
使用:
if date in hols:
date = date + + timedelta(days=1)
我正在 运行 检查数据框中的日期。它们应该始终是:
- 一个。每个月的第一个和第三个星期一,
- 乙。除非周一是节假日,否则就是周一的下周二。
日期一直追溯到 2012 年。
我的计划是首先建立第一个和第三个星期一的日期列表,如果恰逢银行假期,则将日期调整一天。然后检查数据框中的日期,如果列值不在列表中则创建错误。
我编写了以下代码来创建日期列表,但是当我尝试检查日期是否为联邦假日时出现错误。我做错了什么?
# import pendulum
from pandas.tseries.holiday import USFederalHolidayCalendar as holcalendar
from datetime import timedelta, date
yrstart = 2012
mthstart = 1
yrend = datetime.now().year
mthnow = datetime.now().month
c = calendar.Calendar(firstweekday=calendar.SUNDAY)
today = datetime.today().date()
dr = pd.date_range(start='2012-01-01', end=today)
cal = holcalendar()
hols = cal.holidays(start=dr.min(), end=dr.max()).tolist()
ldates = []
for yr in range(yrstart, yrend+1):
if yr == yrend:
mthend = mthnow
else:
mthend = 12
for mth in range(mthstart, mthend+1):
mthcal = c.monthdatescalendar(yr,mth)
date = [day for week in mthcal for day in week if \
day.weekday() == calendar.MONDAY and \
day.month == mth][0]
if date.isin(hols):
date = date + + timedelta(days=1)
ldates.append(date)
date = [day for week in mthcal for day in week if \
day.weekday() == calendar.MONDAY and \
day.month == mth][2]
if date.isin(hols):
date = date + + timedelta(days=1)
ldates.append(date)
输出:
print(hols)
[Timestamp('2012-01-02 00:00:00'),
Timestamp('2012-01-16 00:00:00'),
Timestamp('2012-02-20 00:00:00'),
Timestamp('2012-05-28 00:00:00'),
Timestamp('2012-07-04 00:00:00'),
Timestamp('2012-09-03 00:00:00'),
Timestamp('2012-10-08 00:00:00'),
Timestamp('2012-11-12 00:00:00'),..
...Timestamp('2021-01-01 00:00:00'),
Timestamp('2021-01-18 00:00:00'),
Timestamp('2021-02-15 00:00:00'),
Timestamp('2021-05-31 00:00:00'),
Timestamp('2021-07-05 00:00:00')]
print(date)
datetime.date(2012, 1, 2)
错误:AttributeError:'datetime.date'对象没有属性'isin'
最后这个很容易解决。在这里留下答案给其他卡住的人。
使用:
if date in hols:
date = date + + timedelta(days=1)