簡體   English   中英

python:日期必須是當月的第一周和第三周

[英]python: date has to be 1st and 3rd week of the month

我正在檢查數據框中的日期。 它們應該始終是:

  • A. 每月的第一個和第三個星期一,
  • B. 除非星期一是假期,否則就是那個星期一之后的星期二。

日期一直追溯到2012年。

我的計划是首先建立一個第 1 個和第 3 個星期一的日期列表,如果它是銀行假日,則將日期調整一天。 然后檢查數據框中的日期,如果列值不在列表中,則會創建錯誤。

我編寫了以下代碼來創建日期列表,但是當我嘗試檢查日期是否為聯邦假日時出現錯誤。 我究竟做錯了什么?

# 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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM