pandas转换YYYY-MM-DD HH:MM:SS时间为UNIX时间戳报错
问题说明
现有数据集的时间字段存储格式为YYYY-MM-DD HH:MM:SS,需要将该格式的时间转换为秒级UNIX时间戳(参考示例值:1655805822)。
最初尝试使用如下代码完成转换:
df['Timestamp'] = df['Timestamp'].astype(np.int64) // 1000000
代码运行触发报错,核心报错信息如下:
ValueError: invalid literal for int() with base 10: '2013-11-01 00:10:00'
报错本质是2013-11-01 00:10:00这类字符串格式的时间值,无法直接转换为int64类型整数。
正确实现方案
需要先将字符串格式的时间解析为pandas原生datetime类型,再转换为UNIX时间戳,常用实现如下:
- 最简实现(无时区要求场景)
import pandas as pd # 第一步:将字符串时间转为datetime类型;第二步:转秒级UNIX时间戳 df['Timestamp'] = pd.to_datetime(df['Timestamp']).astype('int64') // 10**9
注意:pandas中datetime类型转整数默认得到纳秒级时间戳,除以10**9即可得到常规秒级UNIX时间戳,和示例格式匹配。
- 时区明确场景(避免本地时区偏移误差)
如果需要统一使用UTC时区的时间戳,可以在转换时显式指定时区参数:
# 输出UTC时区对应的秒级UNIX时间戳 df['Timestamp'] = pd.to_datetime(df['Timestamp'], utc=True).astype('int64') // 10**9
原代码问题点
- 缺少字符串转datetime的中间步骤:直接对包含横杠、冒号、空格的时间字符串做整数类型转换,解释器无法识别这类非数字字符串为合法整数,直接触发值错误。
- 单位换算错误:原代码中
// 1000000是微秒级时间戳转秒级的换算系数,但pandas datetime转整数默认是纳秒单位,正确换算系数应为10**9。
内容的提问来源于stack exchange,提问作者Deong
相关产品推荐
相关产品推荐

