pandas datetime 和 datetime datetime 之间的区别

您好,我有一些 datetime.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 小时,但想了解为什么将来要使脚本更健壮。


青春有我
浏览 156回答 2
2回答

至尊宝的传说

pd.to_datetime接受一个datetime对象,所以你可以这样做(熊猫假设 UTC):pd.to_datetime(datetime(2020, 5, 11))转换为时间戳时你会得到 2 小时的偏移量,因为默认情况下 pythondatetime不知道时区并且会给你一个“天真的”datetime对象(文档在这里:https://docs.python.org/3/library/datetime。 html#aware-and-naive-objects)。生成的时间戳将在当地时区,因此有 2 小时的偏移量。您可以将tzinfo参数传递给datetime指定时间应被视为 UTC 的对象:from datetime import datetimeimport pandas as pdimport pytzpd.to_datetime(datetime(2020, 5, 11, 0, 0, 0, tzinfo=pytz.UTC).timestamp()*1e9)calendar或者,您可以使用以下模块生成 UTC 时间戳:from datetime import datetimeimport pandas as pdimport calendartimestamp = calendar.timegm(datetime(2020, 5, 11, 0, 0, 0).utctimetuple())pd.to_datetime(timestamp*1e9)

冉冉说

如果您的日期时间对象实际上代表本地时间(即您的操作系统设置),您可以简单地使用from datetime import datetimeimport pandas as pdt = 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它将把 naive Python datetime 对象当作 UTC 来对待:from datetime import timezonet1 = 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 为同一日期提供不同的时间戳
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python