gpt4 book ai didi

python - pandas to_datetime from milliseconds 产生不正确的日期时间

转载 作者:太空宇宙 更新时间:2023-11-03 15:33:49 24 4
gpt4 key购买 nike

具有 dateMillis 列的数据框,其中包含纪元的毫秒时间戳

 In [5]: df.head(5)
Out[5]:
custId dateMillis
0 31403 1488232800000
1 28197 1488232800013
2 30158 1488232800026
3 28538 1488232800030
4 28538 1488232800033

如果我使用 python 的日期时间将第一行中的 dateMillis 值转换为日期时间,我会得到以下结果

 In [8]: print datetime.datetime.fromtimestamp(df.ix[0]['dateMillis']/1000.0)
2017-02-27 17:00:00

这是正确的。但是如果我使用 panda 的 to_datetime 转换列 dateMillis 我得到

In [11]: df['date'] = pd.to_datetime(df['dateMillis'], unit='ms')
In [12]: df.head(5)
Out[12]:
custId dateMillis date
0 31403 1488232800000 2017-02-27 22:00:00.000
1 28197 1488232800013 2017-02-27 22:00:00.013
2 30158 1488232800026 2017-02-27 22:00:00.026
3 28538 1488232800030 2017-02-27 22:00:00.030
4 28538 1488232800033 2017-02-27 22:00:00.033

提前五个小时。机器本身有 EST 时区,所以看起来 pandas 将日期时间转换为本地时区。

 In [15]: time.tzname
Out[15]: ('EST', 'EDT')

我希望 to_datetime 与 datetime.fromtimestamp 保持一致。我尝试了 utc 参数的各种值(True/False/None),但没有帮助。

最佳答案

默认情况下的 UNIX 时间戳(纪元)不知道任何时区的任何信息。

"This count starts at the Unix Epoch on January 1st, 1970 at UTC`.

但是您可以使用以下解决方法:

In [47]: datetime.datetime.fromtimestamp(df.loc[0, 'dateMillis']/1000)
Out[47]: datetime.datetime(2017, 2, 27, 23, 0) # 23:00:00

以 UTC TZ 表示:

In [48]: pd.to_datetime(df['dateMillis'], unit='ms')
Out[48]:
0 2017-02-27 22:00:00.000
1 2017-02-27 22:00:00.013
2 2017-02-27 22:00:00.026
3 2017-02-27 22:00:00.030
4 2017-02-27 22:00:00.033
Name: dateMillis, dtype: datetime64[ns]

解决方案:

In [51]: from tzlocal import get_localzone

In [52]: mytz = get_localzone()

In [53]: mytz
Out[53]: <DstTzInfo 'Europe/Berlin' LMT+0:53:00 STD>

In [54]: pd.to_datetime(df['dateMillis'], unit='ms').dt.tz_localize('UTC').dt.tz_convert(mytz)
Out[54]:
0 2017-02-27 23:00:00+01:00
1 2017-02-27 23:00:00.013000+01:00
2 2017-02-27 23:00:00.026000+01:00
3 2017-02-27 23:00:00.030000+01:00
4 2017-02-27 23:00:00.033000+01:00
Name: dateMillis, dtype: datetime64[ns, Europe/Berlin]

关于python - pandas to_datetime from milliseconds 产生不正确的日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42698421/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com