神秘时间转换(熊猫和日期时间)

时间:2018-08-08 21:35:34

标签: python pandas datetime

有人可以解释吗?

import pandas as pd
import datetime
pd.to_datetime(1532329236726000, unit="us")

返回Timestamp('2018-07-23 07:00:36.726000')

datetime.datetime(2018, 7, 23, 8, 0, 36, 726000).timestamp() * 10**6

返回1532329236726000.0

那么1532329236726000是2018-07-23 07:00:36还是2018-07-23 08:00:36吗?

1 个答案:

答案 0 :(得分:1)

这将取决于您创建的datetime对象的时区信息。实际上,在两种情况下,您都创建了朴素的时区对象,但未设置特定的时区

datetime.datetime()对象可以采用本地时区,而不是pd.to_datetime()假定的UTC。

datetime.datetime(2018, 7, 23, 7, 0, 36, 726000).replace(tzinfo=pytz.utc).timestamp() * 10**6返回与您输入原始问题相同的纪元时间

来自python文档

“朴素的对象没有包含足够的信息来明确地相对于其他日期/时间对象定位自身。朴素的对象是否表示协调世界时(UTC),本地时间或其他时区中的时间,完全取决于程序,就像特定程序代表米,英里还是质量取决于程序。天真物体易于理解和使用,而忽略了现实的某些方面。”

https://docs.python.org/3/library/datetime.html

您可以在答案中明确告诉这两个函数,以对构造函数使用wart的形式使用UTC(并且不使用pytz,如下所示)

datetime.datetime(2018, 7, 23, 7, 0, 36, 726000, tzinfo=datetime.timezone.utc)

pd.to_datetime(1532329236726000, unit="us", utc=True)