pandas datetime 和 datetime datetime 之间的差异
Difference between pandas datetime and 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 小时,但想了解为什么将来要使脚本更健壮。
谢谢你的帮助杰斯帕
pd.to_datetime
接受一个 datetime
对象,所以你可以这样做(pandas 假定 UTC):
pd.to_datetime(datetime(2020, 5, 11))
您在转换为时间戳时得到 2 小时的偏移量,因为默认情况下 python 的 datetime
不知道时区,并且会给您一个“天真的”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)
如果您的日期时间对象实际上代表 当地时间(即您的 OS 设置),您可以简单地使用
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')
参见:How do I get a value of datetime.today() in Python that is “timezone aware”?
请记住,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
另请参阅:
你好有一些 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 小时,但想了解为什么将来要使脚本更健壮。
谢谢你的帮助杰斯帕
pd.to_datetime
接受一个 datetime
对象,所以你可以这样做(pandas 假定 UTC):
pd.to_datetime(datetime(2020, 5, 11))
您在转换为时间戳时得到 2 小时的偏移量,因为默认情况下 python 的 datetime
不知道时区,并且会给您一个“天真的”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)
如果您的日期时间对象实际上代表 当地时间(即您的 OS 设置),您可以简单地使用
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')
参见:How do I get a value of datetime.today() in Python that is “timezone aware”?
请记住,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
另请参阅: