熊猫日期时间和日期时间日期时间之间的区别



嗨,我有一些日期时间.datetime格式的日期,我用它来过滤带有熊猫时间戳的熊猫数据帧。我刚刚尝试了以下内容并获得了 2 小时的偏移量:

from datetime import datetime
import pandas as pd
pd.to_datetime(datetime(2020, 5, 11, 0, 0, 0).timestamp()*1e9)

输出为:

->Timestamp('2020-05-10 22:00:00')

谁能解释为什么这会产生 2 小时的偏移量?我在丹麦,所以它对应于格林威治标准时间的偏移量。这是原因吗。我当然可以只增加 2 小时,但想了解为什么要在未来使脚本健壮。

谢谢你的帮助杰斯珀

pd.to_datetime接受一个datetime对象,所以你可以这样做(熊猫假设UTC(:

pd.to_datetime(datetime(2020, 5, 11))

转换为时间戳时,您将获得 2 小时的偏移量,因为默认情况下 python 的datetime不知道时区,并且会给你一个"天真"的datetime对象(文档在这里:https://docs.python.org/3/library/datetime.html#aware-and-naïve-objects(。生成的时间戳将采用本地时区,因此偏移量为 2 小时。

您可以将tzinfo参数传递给datetime对象,指定应将时间视为 UTC:

from datetime import datetime
import pandas as pd
import pytz
pd.to_datetime(datetime(2020, 5, 11, 0, 0, 0, tzinfo=pytz.UTC).timestamp()*1e9)

或者,您可以使用calendar模块生成 UTC 时间戳:

from datetime import datetime
import pandas as pd
import calendar
timestamp = calendar.timegm(datetime(2020, 5, 11, 0, 0, 0).utctimetuple())
pd.to_datetime(timestamp*1e9)

如果你的datetime对象实际上代表本地时间(即你的操作系统设置(,你可以简单地使用

from datetime import datetime
import pandas as pd
t = pd.to_datetime(datetime(2020, 5, 11).astimezone())
# e.g. I'm on CEST, so t is
# Timestamp('2020-05-11 00:00:00+0200', tz='Mitteleuropäische Sommerzeit')

请参阅:如何在 Python 中获取"时区感知"的 datetime.today(( 值?


请记住,pandas会将朴素的 Python 日期时间对象视为 UTC:

from datetime import timezone
t1 = pd.to_datetime(datetime(2020, 5, 11, tzinfo=timezone.utc))
t2 = pd.to_datetime(datetime(2020, 5, 11))
t1.timestamp() == t2.timestamp()
# True

另请参阅:Python datetime 和 pandas 为同一日期提供不同的时间戳

最新更新