重置pandas时间戳的时间部分

2vuwiymt  于 2023-08-01  发布在  其他
关注(0)|答案(6)|浏览(90)

如何重置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 # <--这就是我想做的。

zvms9eto

zvms9eto1#

我想你正在寻找replace方法(参见文档):

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方法,但在单个Timestamps上不能使用(我为此开了一个问题:https://github.com/pydata/pandas/issues/8794):

In [21]: pd.DatetimeIndex([ts]).normalize()[0]
Out[21]: Timestamp('2014-11-12 00:00:00')

8fq7wneg

8fq7wneg2#

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

k5ifujac

k5ifujac3#

而不是使用datetime.datetime,使用datetime.date,它会自动为您截断小时/分钟/秒。
参见https://docs.python.org/library/datetime.html#date-objects

mxg2im7a

mxg2im7a4#

pd.Timestamp('2014-11-12 13:35') - pd.offsets.Micro(0, normalize=True) == Timestamp('2014-11-12 00:00:00')

字符串

hujrc8aj

hujrc8aj5#

我建议使用:

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

字符串

slwdgvem

slwdgvem6#

还有Timestamp.floor

>>> ts = pd.Timestamp('2014/11/12 13:35')
>>> ts.floor('D')
Timestamp('2014-11-12 00:00:00')
>>> ts.round('D')
Timestamp('2014-11-13 00:00:00')

字符串
但是,在我的机器上,Timestamp.normalize几乎是floor的30倍,Timestamp.replace甚至比normalize还快:

>>> %timeit ts.replace(hour=0, minute=0, second=0)
1.23 µs ± 17.2 ns per loop (mean ± std. dev. of 7 runs, 1,000,000 loops each)
>>> %timeit ts.normalize()
2.18 µs ± 137 ns per loop (mean ± std. dev. of 7 runs, 100,000 loops each)
>>> %timeit ts.floor('D')
62.7 µs ± 631 ns per loop (mean ± std. dev. of 7 runs, 10,000 loops each)

相关问题