Loop through dates except for weekends

后端 未结 3 718
生来不讨喜
生来不讨喜 2020-12-15 10:28

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

相关标签:
3条回答
  • 2020-12-15 11:02

    @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
    
    0 讨论(0)
  • 2020-12-15 11:11

    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
    
    0 讨论(0)
  • 2020-12-15 11:17

    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')
    
    0 讨论(0)
提交回复
热议问题