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)