用 pandas 将时间戳转为日期时日期结果不对?可能是时区的问题。
问题描述
刚在做淘宝购物用户行为分析项目,数据是从天池上下载下来的,数据集里面有一个字段是时间戳。时间戳可以理解成还未格式化的时间。
我在用 pandas 中的 to_datetime() 将时间戳转化为日期时,发生了有趣的事情。
可以看到,下图中,转化后的时间是 2017-11-24 17:21:10
。但明明这个数据集在天池的主页介绍中已经说明了,这个数据集中的数据是2017年11月25日至2017年12月3日之间的淘宝用户行为数据,那么怎么会出现11月24日这种数据呢?
于是在网上找了时间戳转日期的在线工具,输入该日期的时间戳后,看到这样的结果:
怎么会发生这种事呢?这个问题肯定不能忽视啊。于是开始研究。
可以观察到,2017-11-24 17:21:10
与 2017-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\')
运行一下:
问题解决。