pandas中Timestamp和datetime的区别

4
我在尝试将转换为内置的python 。我尝试了以下代码:

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,但我想知道为什么会出现这种差异。它们的起始点是否有不同的定义?如果是这样,为什么?


1
简单但重要的区别:pandas Timestamp 默认为UTC,Python datetime 默认为本地时间。请注意,Unix时间戳始终(应该)参考UTC,这就是为什么您观察到了这种差异的原因。 - FObersteiner
1个回答

4
如果您查看 datetime 文档,您会发现 .fromtimestamp(timestamp) 是用于的。

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

它返回一个本地日期。 就是这样。 因此,您需要明确告诉它使用 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


1
你应该强调pandas默认采用UTC时间(naive datetime);这与Python datetime采用本地时间相比有很大的差异。一种语言,两种方法。如果你想知道我的个人意见:本地时间是非常痛苦的。 - FObersteiner
我以为这可能是由于某种定义上的差异,但没有考虑到时区问题,感谢您的回答。 - debsim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接