Search code examples
pythonpandasdate-range

Inclusive argument is not working as expected in pd.date_range()


With pandas 1.40 it was introduced the argument inclusive in the class pd.date_range(). Reading the documentation:

inclusive{“both”, “neither”, “left”, “right”}, default “both” Include boundaries; Whether to set each bound as closed or open

I wanted to use it to create a df with monthly frequency starting on the first day of 01/2020 and finishing on the first day of the month of 12/2022. I wrote this code:

df = pd.date_range(start='01/01/2020', end='31/12/2022', freq = "M", inclusive = "left")

Which is not giving my expected output.

DatetimeIndex(['2020-01-31', '2020-02-29', '2020-03-31', '2020-04-30',
           '2020-05-31', '2020-06-30', '2020-07-31', '2020-08-31',
           '2020-09-30', '2020-10-31', '2020-11-30', '2020-12-31',
           '2021-01-31', '2021-02-28', '2021-03-31', '2021-04-30',
           '2021-05-31', '2021-06-30', '2021-07-31', '2021-08-31',
           '2021-09-30', '2021-10-31', '2021-11-30', '2021-12-31',
           '2022-01-31', '2022-02-28', '2022-03-31', '2022-04-30',
           '2022-05-31', '2022-06-30', '2022-07-31', '2022-08-31',
           '2022-09-30', '2022-10-31', '2022-11-30'],
          dtype='datetime64[ns]', freq='M')

Expected Output

DatetimeIndex(['2020-01-01', '2020-02-01', '2020-03-01', '2020-04-01',
           '2020-05-01', '2020-06-01', '2020-07-01', '2020-08-01',
           '2020-09-01', '2020-10-01', '2020-11-01', '2020-12-01',
           '2021-01-01', '2021-02-01', '2021-03-01', '2021-04-01',
           '2021-05-01', '2021-06-01', '2021-07-01', '2021-08-01',
           '2021-09-01', '2021-10-01', '2021-11-01', '2021-12-01',
           '2022-01-01', '2022-02-01', '2022-03-01', '2022-04-01',
           '2022-05-01', '2022-06-01', '2022-07-01', '2022-08-01',
           '2022-09-01', '2022-10-01', '2022-11-01', '2022-12-01' ],
          dtype='datetime64[ns]', freq='M')
  1. How do I get my expected output with pd.date_range()?
  2. What I misunderstood on how to use correctly the argument inclusive inside pd.date_range()?

Solution

  • Following on from @imxitiz comment, try

    pd.date_range(start='01/01/2020', end='31/12/2022', freq = "MS", inclusive = "left")
    

    Output:

    DatetimeIndex(['2020-01-01', '2020-02-01', '2020-03-01', '2020-04-01',
                   '2020-05-01', '2020-06-01', '2020-07-01', '2020-08-01',
                   '2020-09-01', '2020-10-01', '2020-11-01', '2020-12-01',
                   '2021-01-01', '2021-02-01', '2021-03-01', '2021-04-01',
                   '2021-05-01', '2021-06-01', '2021-07-01', '2021-08-01',
                   '2021-09-01', '2021-10-01', '2021-11-01', '2021-12-01',
                   '2022-01-01', '2022-02-01', '2022-03-01', '2022-04-01',
                   '2022-05-01', '2022-06-01', '2022-07-01', '2022-08-01',
                   '2022-09-01', '2022-10-01', '2022-11-01', '2022-12-01'],
                  dtype='datetime64[ns]', freq='MS')