【问题标题】:pd.Timestamp.floor() is rounding up [duplicate]pd.Timestamp.floor() 正在四舍五入[重复]
【发布时间】: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


【解决方案1】:

当您生成 dt 时,看起来您正在获得标准时间。这是因为当您应用时区时,它还不知道日期。

在第二个中,一旦它已经知道日期,您将通过应用时区来转换为日光

前一个是 1430 GMT。第二个是 1400 GMT。

我不明白为什么偏移量减少了四分钟。我猜在 1970 年,纽约时间只比我们今天所说的 GMT 时间晚 4:56

我想如果你把 2021-07-03 改成 2021-12-03 你会得到你期望的答案

【讨论】:

  • 4:56 是本地平均时间 (LMT) 偏移量,它是来自数据库的第一个条目,请参阅 P. Eggert's tz repo。关键是,对于 pytz,您必须 localize,正如欺骗问题的答案所描述的那样。
猜你喜欢
  • 2023-01-12
  • 2018-12-24
  • 2011-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多