pandas转换纪元时间为带时区datetime出现1970年异常问题咨询
错误原因
你设置的unit参数单位不符合实际时间戳的精度:
你提供的示例时间戳为16位整数,属于微秒级纪元时间(即从UTC 1970-01-01 00:00:00起累计的微秒数),而你代码中指定的unit="ns"是纳秒级精度,1微秒等于1000纳秒,直接按纳秒解析会得到仅为实际值1/1000的时间长度,最终解析结果自然对应1970年的错误日期。
修复方案
直接修改unit参数为微秒单位us即可,修改后的代码如下:
df['time'] = pd.to_datetime(df['time'], unit="us", utc=True)
验证结果
以你给出的第一个示例值1602206700206666为例,用上述代码解析后得到的结果为2020-10-09 02:45:00.206666+00:00,完全符合你预期的2020年10月的时间范围。
补充:纪元时间单位对应位数参考
你可以根据时间戳的整数位数快速判断对应精度:
- 10位:秒级,对应
unit="s" - 13位:毫秒级,对应
unit="ms" - 16位:微秒级,对应
unit="us" - 19位:纳秒级,对应
unit="ns"
内容的提问来源于stack exchange,提问作者matttree
相关产品推荐
相关产品推荐

