重置熊猫时间戳的时间部分

Posted

技术标签:

【中文标题】重置熊猫时间戳的时间部分【英文标题】:Reset time part of a pandas timestamp 【发布时间】:2015-01-09 00:59:13 【问题描述】:

如何重置 pandas 时间戳的时间部分?

我想重置 pandas.Timestamp 值中的时间部分。 我想我可以使用以下过程来做到这一点。

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

即使我的猜测是正确的,也需要很长时间才能完成。 有没有直接的方法来实现这个目标?

在 [371] 中:ts = pd.Timestamp('2014/11/12 13:35')

在 [372] 中:ts

输出[372]:时间戳('2014-11-12 13:35:00')

在 [373]: ts.hour = 0 #

【问题讨论】:

如果您正在处理DatetimeIndex,您可以使用normalize 方法。然而,这在单个时间戳上不可用(解决方法是:pd.DatetimeIndex([ts]).normalize()[0] 您想重置“整个”时间部分(仅保留日期),还是只想重置小时数? 【参考方案1】:

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

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

【讨论】:

【参考方案2】:

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

【讨论】:

这里最有价值的东西,pandas时间戳是继承自datetime!!!如果我知道这一点,我就不会那么害怕了。 :) 谢谢! replace 方法似乎不适用于列,是吗? AttributeError: 'DatetimeProperties' object has no attribute 'replace' 确实,这在列/索引上不可用。在这种情况下,如果您想使用replace,则需要使用df["col"].apply(lambda ts: ts.replace(..)) 之类的东西(但请注意,normalize 在列上可用)。【参考方案3】:
pd.Timestamp('2014-11-12 13:35') - pd.offsets.Micro(0, normalize=True) == Timestamp('2014-11-12 00:00:00')

【讨论】:

【参考方案4】:

注意replace方法不会改变Timestamp,所以如果你想保留修改后的Timestamp你必须分配:

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')

【讨论】:

【参考方案5】:

我推荐使用:

pd.Timestamp('2014-11-12 13:35')-pd.Timedelta(f"pd.Timestamp('2014-11-12 13:35').hour hours")

【讨论】:

以上是关于重置熊猫时间戳的时间部分的主要内容,如果未能解决你的问题,请参考以下文章

如何在熊猫数据框中设置时间戳的偏移量?

在熊猫中获取与给定日期时间最接近的时间戳的行的有效方法

更改熊猫中日期时间列的时区并添加为分层索引

如何仅绘制时间戳的时间部分,包括日期?

Python时间戳的一些使用

熊猫滚动适用于可变窗口长度