Timestamp.floor(freq, ambiguous='raise', nonexistent='raise')

Return a new Timestamp floored to this resolution.


Frequency string indicating the flooring resolution.

ambiguousbool or {‘raise’, ‘NaT’}, default ‘raise’

The behavior is as follows:

  • bool contains flags to determine if time is dst or not (note that this flag is only applicable for ambiguous fall dst dates).

  • ‘NaT’ will return NaT for an ambiguous time.

  • ‘raise’ will raise an AmbiguousTimeError for an ambiguous time.

nonexistent{‘raise’, ‘shift_forward’, ‘shift_backward, ‘NaT’, timedelta}, default ‘raise’

A nonexistent time does not exist in a particular timezone where clocks moved forward due to DST.

  • ‘shift_forward’ will shift the nonexistent time forward to the closest existing time.

  • ‘shift_backward’ will shift the nonexistent time backward to the closest existing time.

  • ‘NaT’ will return NaT where there are nonexistent times.

  • timedelta objects will shift nonexistent times by the timedelta.

  • ‘raise’ will raise an NonExistentTimeError if there are nonexistent times.

ValueError if the freq cannot be converted.


If the Timestamp has a timezone, flooring will take place relative to the local (“wall”) time and re-localized to the same timezone. When flooring near daylight savings time, use nonexistent and ambiguous to control the re-localization behavior.


Create a timestamp object:

>>> ts = pd.Timestamp('2020-03-14T15:32:52.192548651')

A timestamp can be floored using multiple frequency units:

>>> ts.floor(freq='H') # hour
Timestamp('2020-03-14 15:00:00')
>>> ts.floor(freq='T') # minute
Timestamp('2020-03-14 15:32:00')
>>> ts.floor(freq='S') # seconds
Timestamp('2020-03-14 15:32:52')
>>> ts.floor(freq='N') # nanoseconds
Timestamp('2020-03-14 15:32:52.192548651')

freq can also be a multiple of a single unit, like ‘5T’ (i.e. 5 minutes):

>>> ts.floor(freq='5T')
Timestamp('2020-03-14 15:30:00')

or a combination of multiple units, like ‘1H30T’ (i.e. 1 hour and 30 minutes):

>>> ts.floor(freq='1H30T')
Timestamp('2020-03-14 15:00:00')

Analogous for pd.NaT:

>>> pd.NaT.floor()

When rounding near a daylight savings time transition, use ambiguous or nonexistent to control how the timestamp should be re-localized.

>>> ts_tz = pd.Timestamp("2021-10-31 03:30:00").tz_localize("Europe/Amsterdam")
>>> ts_tz.floor("2H", ambiguous=False)
Timestamp('2021-10-31 02:00:00+0100', tz='Europe/Amsterdam')
>>> ts_tz.floor("2H", ambiguous=True)
Timestamp('2021-10-31 02:00:00+0200', tz='Europe/Amsterdam')