gpt4 book ai didi

python - timedelta 操作的错误结果

转载 作者:行者123 更新时间:2023-11-28 16:42:28 27 4
gpt4 key购买 nike

dta_h 是一个 DataFrame,dta_h.Datetime 看起来像这样:

0    2013-03-01 00:00:00
1 2013-02-28 23:00:00
2 2013-02-28 22:00:00
3 2013-02-28 21:00:00
...
Name: Datetime, Length: 63001, dtype: datetime64[ns]

直到最近(我稍后会解释这意味着什么)我可以这样做来减去每个时间段的一小时:

dta_h.Datetime-np.timedelta(hours=1)

但是现在,如果我执行上述操作,我会得到这个:

0    2013-03-01 00:11:34.967296
1 2013-02-28 23:11:34.967296
2 2013-02-28 22:11:34.967296
3 2013-02-28 21:11:34.967296
...

这显然不是我想要的。然而,这:

[i-timedelta(hours=1) for i in dta_h.Datetime ]

仍然会产生想要的结果:

0    2013-02-28 23:00:00
1 2013-02-28 22:00:00
2 2013-02-28 21:00:00
3 2013-02-28 20:00:00
....
Length: 63001, dtype: datetime64[ns]

我 99% 确定这个问题是在我升级到 Pandas 0.11 时开始的。我一直在文档中四处寻找可能无法成功解释它的版本中的任何差异。我还找到了这个帖子:

pandas handling of numpy timedelta64[ms]

指的是这个 Pandas 问题

https://github.com/pydata/pandas/issues/3009

根据我在那里读到的内容,我尝试了:

dta_h.Datetime-np.timedelta64(hours=1)

但这实际上什么也没做:

0    2013-03-01 00:00:00
1 2013-02-28 23:00:00
2 2013-02-28 22:00:00
3 2013-02-28 21:00:00
...

知道为什么 1) df-np.timedelta 停止工作,以及 2) 为什么理解列表版本仍然有效吗?感谢您的帮助。

仅供引用,我使用的是 Numpy 1.6.2,而且我之前说过,最近从 Pandas 0.9 升级到了 0.11

最佳答案

Numpy 在 1.6.2/1 中的 timedeltas 有很多问题。它的工作间隔小于 30 分钟(我不知道为什么)。最好的办法是升级到更稳定的 numpy 1.7.0/1,并使用 datetime.timedelta

In [33]: df = DataFrame(dict(date = [Timestamp('20130301'),Timestamp('20130228 23:00:00'),Timestamp('20130228 22:00:00'),Timestamp('20130228 21:00:00')]))

In [34]: df
Out[34]:
date
0 2013-03-01 00:00:00
1 2013-02-28 23:00:00
2 2013-02-28 22:00:00
3 2013-02-28 21:00:00

In [37]: df['date'] + timedelta(hours=1)
Out[37]:
0 2013-03-01 01:00:00
1 2013-03-01 00:00:00
2 2013-02-28 23:00:00
3 2013-02-28 22:00:00
Name: date, dtype: datetime64[ns]

In [38]: np.__version__
Out[38]: '1.7.1'

关于python - timedelta 操作的错误结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17491446/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com