为了账号安全,请及时绑定邮箱和手机立即绑定

pandas datetime 和 datetime datetime 之间的区别

pandas datetime 和 datetime datetime 之间的区别

青春有我 2023-02-07 14:23:56
您好,我有一些 datetime.datetime 格式的日期,我用它们来过滤带有熊猫时间戳的熊猫数据框。我刚刚尝试了以下方法并获得了 2 小时的偏移量:from datetime import datetimeimport pandas as pdpd.to_datetime(datetime(2020, 5, 11, 0, 0, 0).timestamp()*1e9)输出是:->Timestamp('2020-05-10 22:00:00')谁能解释为什么这会产生 2 小时的偏移量?我在丹麦,所以它对应于格林威治标准时间的偏移量。是这个原因吗。我当然可以只增加 2 小时,但想了解为什么将来要使脚本更健壮。
查看完整描述

2 回答

?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

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 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)


查看完整回答
反对 回复 2023-02-07
?
冉冉说

TA贡献1877条经验 获得超1个赞

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


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它将把 naive Python datetime 对象当作 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 为同一日期提供不同的时间戳


查看完整回答
反对 回复 2023-02-07
  • 2 回答
  • 0 关注
  • 155 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信