pandas实现datetime64与Unix时间戳互转

山间有风
山间有风
发布时间:2026-10-12| 3人浏览过
原创

在处理结构化数据时,常需将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 时间序列处理的数据清洗技巧请关注本站其它相关文章!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。