How to select rows between two dates in pandas?

To select rows between two dates in pandas, you can use the loc indexer and pass it two arguments: the start and end date. For example, dataframe.loc[start_date:end_date], where start_date and end_date are strings representing valid datetime values. This will return a dataframe with rows corresponding to the range between the two dates.


You can use the following syntax to select rows between two specific dates in a pandas DataFrame:

df[df.date.between('2022-01-02', '2022-01-06')]

This particular example selects all rows in the DataFrame between 2022-01-02 and 2022-01-06.

The following example shows how to use this syntax in practice.

Example: Select Rows Between Two Dates in Pandas

Suppose we have the following pandas DataFrame:

import pandas as pd

#create DataFrame
df = pd.DataFrame({'date': pd.date_range(start='1/1/2022', periods=8),
                   'sales': [18, 20, 15, 14, 10, 9, 8, 12],
                   'returns': [5, 7, 7, 9, 12, 3, 2, 4]})

#view DataFrame
print(df)

        date  sales  returns
0 2022-01-01     18        5
1 2022-01-02     20        7
2 2022-01-03     15        7
3 2022-01-04     14        9
4 2022-01-05     10       12
5 2022-01-06      9        3
6 2022-01-07      8        2
7 2022-01-08     12        4

We can use the following syntax to select only the rows that fall between the date 2022-01-02 and 2022-01-06:

#select all rows where date is between 2022-01-02 and 2022-01-06
df[df.date.between('2022-01-02', '2022-01-06')]

              date      sales   returns
1	2022-01-02	20	7
2	2022-01-03	15	7
3	2022-01-04	14	9
4	2022-01-05	10	12
5	2022-01-06	9	3

Notice that only the rows between the dates 2022-01-02 and 2022-01-06 are selected.

If you’d like, you can also define the start and end dates outside of the between() function:

#define start and end dates
start_date = '2022-01-02'
end_date = '2022-01-06'

#select all rows where date is between start and end
df[df.date.between(start_date, end_date)]


              date	sales	returns
1	2022-01-02	20	7
2	2022-01-03	15	7
3	2022-01-04	14	9
4	2022-01-05	10	12
5	2022-01-06	9	3

This produces the same result.

Note that if your date column is not in a recognizable datetime format, you may first need to use the following code to convert it to a datetime format:

df['date'] = pd.to_datetime(df['date']) 

Once you’ve done this, you can proceed to use the between() function to select rows between specific dates.

x