pandas实现datetime64与Unix时间戳互转
在处理结构化数据时,常需将pandas的datetime64格式或Timestamp对象与Unix时间戳互换。本文演示如何通过pd.to_datetime与整型转换完成单条及整列数据的秒级互转,包含UTC时区处理、纳秒剥离及年月日时分秒的独立提取,附带标准库辅助方案。
操作目标与前提条件
本流程旨在解决数据分析或爬虫日志清洗中常见的格式不匹配问题。Pandas 默认将时间序列底层存储为 datetime64 类型,其精度单位为纳秒,而 Unix 时间戳通常要求精确到秒的整型数值。执行前请确保环境已安装 pandas,并准备好需要转换的源数据(如 CSV 文件或独立时间字符串)。
第1步:Unix 时间戳转为 Pandas 格式
目标是将整型 Unix 时间戳还原为带时区的可读时间。由于多数系统日志以 UTC 时间记录,直接转换会导致北京标准时间出现 8 小时偏差,需同步进行时区对齐。
import pandas as pd
def unix_to_timestamp(unixtime):
# unit='s' 指定输入为秒级,utc=True 初始化为UTC时间
# tz_convert 转换为东八区(北京时间)
return pd.to_datetime(unixtime, unit='s', utc=True).tz_convert('Asia/Shanghai')
# 测试转换
original_ts = 1514737265
converted_dt = unix_to_timestamp(original_ts)
print(converted_dt)
第2步:Pandas Timestamp 转回 Unix 时间戳
目标是将已处理的时间对象恢复为标准的秒级整型。通过修改数据精度类型至 datetime64[s] 即可丢弃纳秒碎片,随后转为整型即可完成逆向转换。
def timestamp_to_unix(dt64):
# 截断至秒级精度,再转为整型数值
return int(dt64.astype('datetime64[s]').astype(int))
print(timestamp_to_unix(converted_dt))
第3步:处理 CSV 导入的整列时间数据
目标是在批量场景下高效清洗时间列。读取 CSV 后时间字段默认为字符串,需先统一格式化,再提取底层数值阵列供后续算法使用。
import pandas as pd
# 1. 读取数据并将目标列转换为时间格式
# 假设 CSV 中存在名为 'create_time' 的字符串列
df = pd.read_csv('airquality.csv')
df['create_time'] = pd.to_datetime(df['create_time'])
# 2. 批量转换为秒级 Unix 时间戳
# 利用整除运算快速剥离纳秒级低位数据,返回新列
unix_col = df['create_time'].astype('int64') // 10**9
df['unix_second'] = unix_col
print(list(unix_col[:3]))
第4步:拆分并提取时间分量
目标是从完整时间戳中独立出年月日时分秒等维度。Pandas 提供了向量化属性,可直接作用于 Series 或单个 Timestamp 对象。
# 针对单条数据
print(f"年: {converted_dt.year}, 月: {converted_dt.month}")
print(f"日: {converted_dt.day}, 时: {converted_dt.hour}")
print(f"分: {converted_dt.minute}, 秒: {converted_dt.second}")
# 若需脱离 pandas 进行初步解析(适用于预处理或轻量脚本)
from datetime import datetime
timestr = '2018-01-01 00:21:05'
parsed_obj = datetime.strptime(timestr, '%Y-%m-%d %H:%M:%S')
print(type(parsed_obj))
完成状态验证与常见排错
转换完成后,可通过以下现象确认操作成功:
- 正向转换输出显示
+08:00时区标识,且年月日与预期日历一致。 - 逆向转换返回纯数字字符串,无小数点或科学计数法残留。
- CSV 整列转换后,新增的时间戳列类型显示为
int64而非对象(Object)。
TypeError 或 ValueError,通常为输入列未正确声明为字符串或时间格式。请使用 df['col'].dtype 检查当前类型,并通过 pd.to_numeric() 或 pd.to_datetime() 提前清洗脏数据。遇到 AttributeError 导致无法调用 .value 时,请直接替换为上述代码中的 .astype('int64') 或 .dt.timestamp() 方法。
简要总结
掌握 pd.to_datetime(unit='s') 与 .astype('int64') // 10**9 的组合即可覆盖绝大多数 datetime64 与 unix 时间戳互转场景。结合标准库的 strptime 与 strftime,可灵活应对跨模块的数据交换需求,提升数据管道的时间处理稳定性。以上就是 pandas 实现 datetime64 与 unix 时间戳互转的详细内容,更多关于 pandas 时间序列处理的数据清洗技巧请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













