So I have a script that has date arguments for different functions and I want it to loop through 01-01-2012
to 06-09-2012
not including weekends. I
@brandizzi's answer is more syntactically aesthetic but as an alternative you can use the following
start = datetime(2012, 1, 1)
end = datetime(2012, 10, 6)
delta = timedelta(days=1)
d = start
diff = 0
SATURDAY = 5
while d <= end:
if d.weekday() < SATURDAY:
diff += 1
d += delta
Use the datetime.weekday() method. It returns values between zero and six, related to the weekdays. Saturday value is 5 and Sunday value is 6; so, if you skip the operation when these values appear, you skip weekdends:
start = datetime(2012, 1, 1)
end = datetime(2012, 10, 6)
delta = timedelta(days=1)
d = start
diff = 0
weekend = set([5, 6])
while d <= end:
if d.weekday() not in weekend:
diff += 1
d += delta
There is easier way to do this using freq = 'B'
for business day frequency
.
import pandas as pd
dt = pd.date_range(start=datetime.date.today(), periods=10, freq='B')
dt
which gives you :
DatetimeIndex(['2018-08-13', '2018-08-14', '2018-08-15', '2018-08-16',
'2018-08-17', '2018-08-20', '2018-08-21', '2018-08-22',
'2018-08-23', '2018-08-24'],
dtype='datetime64[ns]', freq='B')
you check name of day also by:
dt.weekday_name
Index(['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Monday',
'Tuesday', 'Wednesday', 'Thursday', 'Friday'],
dtype='object')