How can I reset the time part of a pandas timestamp?
I want to reset time part in value of pandas.Timestamp.
I guess I can do it using the following procedure.
- step 1) Timestamp to datetime type
- step 2) datetime to seconds
- step 3) truncate time part in seconds
- step 4) bring back seconds to Timestamp
Even if my guess is correct, it takes too long to do.
Is there a straightforward way to achieve this goal?
In [371]: ts = pd.Timestamp('2014/11/12 13:35')
In [372]: ts
Out[372]: Timestamp('2014-11-12 13:35:00')
In [373]: ts.hour = 0 # <-- this is what I am trying to do.
I think you are looking for the replace
method (see docs):
In [18]: ts
Out[18]: Timestamp('2014-11-12 13:35:00')
In [19]: ts.replace(hour=0)
Out[19]: Timestamp('2014-11-12 00:35:00')
This is a method inherited from datetime.datetime
If you want to reset the full time part, you specify all parts in replace
:
In [20]: ts.replace(hour=0, minute=0, second=0)
Out[20]: Timestamp('2014-11-12 00:00:00')
There is also a DatetimeIndex.normalize
method, but this isn't available on the individual Timestamps (I opened an issue for that: https://github.com/pydata/pandas/issues/8794):
In [21]: pd.DatetimeIndex([ts]).normalize()[0]
Out[21]: Timestamp('2014-11-12 00:00:00')
Note that the replace
method does not change the Timestamp, so if you want to keep the modified Timestamp you have to assign:
In [2]: ts = pd.Timestamp('2014/11/12 13:35')
In [3]: ts.replace(hour=0)
Out[3]: Timestamp('2014-11-12 00:35:00')
In [4]: ts
Out[4]: Timestamp('2014-11-12 13:35:00')
Note: ts is not modified in the code above.
In [5]: ts = ts.replace(hour=0)
In [6]: ts
Out[6]: Timestamp('2014-11-12 00:35:00')
Instead of using datetime.datetime
, use datetime.date
and it will automatically truncate the hour/minute/second for you.
See https://docs.python.org/library/datetime.html#date-objects
pd.Timestamp('2014-11-12 13:35') - pd.offsets.Micro(0, normalize=True) == Timestamp('2014-11-12 00:00:00')