【发布时间】:2021-12-12 09:55:53
【问题描述】:
pd.Timestamp.floor() 没有返回时间戳的底数,而是向上取整。
import datetime
timestamp = datetime.time(8, 0, 0, tzinfo=pytz.timezone("America/New_York"))
dt = datetime.datetime.combine(
datetime.date(2021, 7, 3), timestamp
) + datetime.timedelta(hours=1, minutes=30)
# This gives: 2021-07-03 09:30:00-04:56
print(pd.Timestamp(dt))
# This gives: Timestamp('2021-07-03 10:00:00-0400', tz='America/New_York')
print(pd.Timestamp(dt).floor(freq='H'))
当dt代表9:30am时,为什么地板给Timestamp('2021-07-03 10:00:00-0400', tz='America/New_York'),而不是Timestamp('2021-07-03 09:00:00-0400', tz='America/New_York')?
【问题讨论】:
-
似乎与时区有关。忽略它会产生正确的结果。我以前从未使用过
pytz,所以我不确定问题出在哪里。您是否可以在楼层操作后附加时区信息? -
你不应该在这里使用 datetime 模块和 pytz。
pd.Timestamp("2021-07-03 09:30:00").tz_localize("America/New_York").floor('H')工作正常。 -
所谓的重复确实不是这个问题的内容。 OP 甚至没有提到奇怪的初始时区偏移。有趣的是,它最初是用标准时间格式化的,并在向下取整的同时用夏令时重新格式化,所以看起来它正在向上取整。
标签: python pandas datetime pytz