重置pandas时间戳的时间部分

2024-05-01 21:37:44 发布

您现在位置:Python中文网/ 问答频道 /正文

如何重置熊猫时间戳的时间部分?

我想重置pandas.Timestamp值中的时间部分。
我想我可以用下面的程序来做。

  • 步骤1)时间戳到日期时间类型
  • 步骤2)日期时间到秒
  • 步骤3)以秒为单位截断时间部分
  • 步骤4)将秒恢复到时间戳

即使我的猜测是正确的,也需要很长时间。 有没有直截了当的方法来实现这个目标?

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.


Tags: 方法in程序类型目标pandas时间步骤
3条回答

我想您正在寻找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')

请注意,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')

使用datetime.datetime而不是使用datetime.date,它将自动为您截断小时/分钟/秒。

https://docs.python.org/library/datetime.html#date-objects

相关问题 更多 >