To round a datetime column to the nearest quarter, minute or hour in Pandas, we can use the method: dt.round()
.
round datetime column to nearest hour
Below you can find an example of rounding to the closest hour in Pandas and Python. We use method dt.round()
with parameter H
:
import pandas as pd
dates = ['2023-03-25 11:37:00', '2023-03-25 09:18:00', '2023-03-25 15:23:00']
df = pd.DataFrame({'date': dates})
df['date'] = pd.to_datetime(df['date'])
df['date'].dt.round('H')
the result is rounded times to the nearest hour:
0 2023-03-25 12:00:00
1 2023-03-25 09:00:00
2 2023-03-25 15:00:00
Name: date, dtype: datetime64[ns]
round datetime to nearest quarter or minutes
We can round to the nearest quarter in Pandas by the same method: .dt.round('15min')
specifying the interval in minutes. Example of rounding down in Pandas to N minutes:
import pandas as pd
dates = ['2023-03-25 11:37:00', '2023-03-25 09:18:00', '2023-03-25 15:23:00']
df = pd.DataFrame({'date': dates})
df['date'] = pd.to_datetime(df['date'])
df['date'].dt.round('15min')
result of rounding to quarter is:
0 2023-03-25 11:30:00
1 2023-03-25 09:15:00
2 2023-03-25 15:30:00
Name: date, dtype: datetime64[ns]
In the next section you can find a link to all possible frequency values.
datetime - round vs floor
Finally let's see what is the difference between Pandas methods:
- round
- floor
df['rounded_date'] = df['date'].dt.round('H')
df['floored_date'] = df['date'].dt.floor('H')
You can find the result below:
date | rounded_date | floored_date | |
---|---|---|---|
0 | 2023-03-25 11:37:00 | 2023-03-25 12:00:00 | 2023-03-25 11:00:00 |
1 | 2023-03-25 09:18:00 | 2023-03-25 09:00:00 | 2023-03-25 09:00:00 |
2 | 2023-03-25 15:23:00 | 2023-03-25 15:00:00 | 2023-03-25 15:00:00 |
So difference is in the first row where:
12:00:00
- round the datetime column to the nearest hour11:00:00
- floor the datetime column to the nearest hour
Resources
- pandas.Series.dt.round
- pandas.to_datetime
- Time series / date functionality
- Offset/frequency aliases - for a list of possible freq values
- pandas.Series.dt.floor