[英]python: date has to be 1st and 3rd week of the month
我正在檢查數據框中的日期。 它們應該始終是:
日期一直追溯到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.