【问题标题】:Difference between pandas Timestamp and datetime熊猫时间戳和日期时间之间的区别
【发布时间】:2021-05-08 23:54:32
【问题描述】:

我正在尝试将pandas.Timestamp 转换为内置的python datetime。我尝试了以下方法:

pandas_time = pd.Timestamp(year=2020, day=4, month=2, hour=0, minute=0, second=1)
pandas_ts = pandas_time.timestamp()
datetime_time = datetime.datetime.fromtimestamp(pandas_ts)
datetime_ts = datetime_time.timestamp()

查看变量可以得出:

pandas_time:   2020-02-04 00:00:01
datetime_time: 2020-02-04 01:00:01
pandas_ts:   1580774401.0
datetime_ts: 1580774401.0

所以它们都有相同的时间戳,但日期相差一小时。 当我反过来尝试时,我得到了这个:

datetime_time = datetime.datetime(year=2020, day=4, month=2, hour=0, minute=0, second=1)
datetime_ts = datetime_time.timestamp()
pandas_time = pd.Timestamp(datetime_time)
pandas_ts = pandas_time.timestamp()

pandas_time:   2020-02-04 00:00:01
datetime_time: 2020-02-04 00:00:01
pandas_ts:   1580774401.0
datetime_ts: 1580770801.0

现在日期相同,但时间戳相差 3600(1 小时)。 我确实知道我可以使用 pandas to_pydatetime 将 pandas Timestamp 转换为 python datetime 但我想知道为什么会出现这种差异。他们的起点定义不同吗?如果是这样,为什么?

【问题讨论】:

  • 简单但重要的区别:pandas Timestamp 默认为 UTC,Python datetime 默认为本地时间。请注意,Unix 时间始终(应该)参考 UTC,所以这就是您观察差异的原因。

标签: python pandas datetime timestamp


【解决方案1】:

如果您查看 datetime 文档,它是为 .fromtimestamp(timestamp) 编写的

classmethod date.fromtimestamp(timestamp) 返回POSIX时间戳对应的本地日期,如time.time()返回。

所以它返回local date。而已。所以你需要告诉它明确使用utc,而pandas默认使用utc。

pandas_time = pd.Timestamp(year=2020, month=2, day=4,  hour=0, minute=0, second=1)
pandas_ts = pandas_time.timestamp()
datetime_time = datetime.datetime.fromtimestamp(pandas_ts, tz=timezone.utc)
datetime_ts = datetime_time.timestamp()

第二种情况类似

datetime_time = datetime.datetime(year=2020, day=4, month=2, hour=0, minute=0, second=1, tzinfo=timezone.utc)
datetime_ts = datetime_time.timestamp()
pandas_time = pd.Timestamp(datetime_time)
pandas_ts = pandas_time.timestamp()

从您的问题来看,您似乎生活在 UTC+1 国家/地区:p

【讨论】:

  • 您应该强调 pandas 将 UTC 作为默认值(天真的日期时间);-) 这与采用本地时间(如 Pyhton 日期时间所做的那样)有很大的不同。一种语言,两种方法。如果您需要我的个人意见:当地时间的事情只是痛苦的。
  • 我以为是因为定义上的某种差异,但没有想到时区,谢谢您的回答
猜你喜欢
  • 2020-10-19
  • 2017-02-23
  • 2019-06-16
  • 1970-01-01
  • 1970-01-01
  • 2011-10-29
  • 1970-01-01
相关资源
最近更新 更多