重置熊猫时间戳的时间部分
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")
【讨论】:
以上是关于重置熊猫时间戳的时间部分的主要内容,如果未能解决你的问题,请参考以下文章