用 pandas 将时间戳转为日期时日期结果不对?可能是时区的问题。


问题描述

刚在做淘宝购物用户行为分析项目,数据是从天池上下载下来的,数据集里面有一个字段是时间戳。时间戳可以理解成还未格式化的时间。

我在用 pandas 中的 to_datetime() 将时间戳转化为日期时,发生了有趣的事情。

可以看到,下图中,转化后的时间是 2017-11-24 17:21:10。但明明这个数据集在天池的主页介绍中已经说明了,这个数据集中的数据是2017年11月25日至2017年12月3日之间的淘宝用户行为数据,那么怎么会出现11月24日这种数据呢?

于是在网上找了时间戳转日期的在线工具,输入该日期的时间戳后,看到这样的结果:

怎么会发生这种事呢?这个问题肯定不能忽视啊。于是开始研究。

可以观察到,2017-11-24 17:21:102017-11-25 01:21:10 之间相差了 8 个小时。于是就想到会不会和时区有关?又想到 pandas 是国外团队开发的,那十有八九是跟时区有关了。

于是上网查资料,从一篇博客得知,pandas 返回的 2017-11-24 17:21:10 这个结果是格林威治标准时间,与北京时间差了 8 小时。又查了 to_datetime() 这个方法的官方文档,得知有一个参数 origin ,可以指定时间戳的起始时间。

于是将代码改为,也就是以北京时间为起始时间:

df['Time'] = pd.to_datetime(df['Timestamp'], origin='1970-01-01 08:00:00', unit='s')

运行一下:

问题解决。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM