如何重置pandas时间戳的时间部分?
我想重置pandas.Timestamp值的时间部分。
我想我可以使用以下程序来完成它。
即使我的猜测是正确的,也需要很长时间。 是否有直接的方法来实现这一目标?
在[371]中:ts = pd.Timestamp(' 2014/11/12 13:35')
在[372]中:ts
Out [372]:时间戳(' 2014-11-12 13:35:00')
在[373]中:ts.hour = 0#< - 这就是我想要做的。
答案 0 :(得分:20)
我认为您正在寻找replace
方法(请参阅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')
这是一种继承自datetime.datetime
如果要重置全职部分,请在replace
中指定所有部分:
In [20]: ts.replace(hour=0, minute=0, second=0)
Out[20]: Timestamp('2014-11-12 00:00:00')
还有DatetimeIndex.normalize
方法,但单个时间戳上没有这个方法(我为此打开了一个问题:https://github.com/pydata/pandas/issues/8794):
In [21]: pd.DatetimeIndex([ts]).normalize()[0]
Out[21]: Timestamp('2014-11-12 00:00:00')
答案 1 :(得分:1)
请注意,replace
方法不会更改时间戳,因此如果要保留修改后的时间戳,则必须指定:
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')
注意:上面的代码中没有修改ts。
In [5]: ts = ts.replace(hour=0)
In [6]: ts
Out[6]: Timestamp('2014-11-12 00:35:00')
答案 2 :(得分:0)
不使用datetime.datetime
,而是使用datetime.date
,它会自动截断小时/分钟/秒。
请参阅https://docs.python.org/library/datetime.html#date-objects
答案 3 :(得分:0)
pd.Timestamp('2014-11-12 13:35') - pd.offsets.Micro(0, normalize=True) == Timestamp('2014-11-12 00:00:00')
答案 4 :(得分:0)
我建议使用:
pd.Timestamp('2014-11-12 13:35')-pd.Timedelta(f"{pd.Timestamp('2014-11-12 13:35').hour} hours")