如何在 Python 中将 ISO 8601 时间戳转换为日期并计算日期差值
技术百科
碧海醫心
发布时间:2026-01-01
浏览: 次 本文详解如何使用 pandas 的 `to_datetime()` 将含时区的 iso 格式字符串(如 `'2025-02-06t00:00:00.000z'`)安全转换为 datetime 类型,并准确计算两列日期间的天数差,避免 `typeerror: unsupported operand type(s) for -: 'str' and 'str'`。
在处理真实业务数据(如 API 返回、日志或数据库导出)时,时间字段常以 ISO 8601 标准格式存储,例如 '2025-02-06T00:00:00.000Z'。该格式虽人类可读,但在 pandas 中默认被识别为字符串(object 类型),无法直接参与算术运算——这也是你遇到 TypeError: unsupported operand type(s) for -: 'str' and 'str' 的根本原因。
正确做法是:先统一转换为 datetime64[ns, UTC] 类型,再执行减法,最后用 .dt.days 提取整数天数差。pd.to_datetime() 是最健壮的解决方案,它能自动识别 Z(表示 UTC 时区)、毫秒精度及 ISO 格式,无需手动指定 format 参数(除非性能极端敏感或格式异常)。
以下为完整可运行示例:
import pandas as pd
# 构造示例数据
data = {
'ID': ['089', '983', '037', '654'],
'Schedule_Date': ['2025-02-06T00:00:00.000Z', '2025-03-17T00:00:00.000Z',
'2025-02-02T00:00:00.000Z', '2025-08-14T00:00:00.000Z'],
'Out_Date': ['2025-02-08T00:00:00.000Z', '2025-04-27T00:00:00.000Z',
'2025-05-24T00:00:00.000Z', '2025-02-26T00:00:00.000Z']
}
df = pd.DataFrame(data, index=['rank1', 'rank2', 'rank3', 'rank4'])
# ✅ 关键步骤:将字符串列转为 datetime(自动识别 Z 时区)
df['Schedule_Date'] = pd.to_datetime(df['Schedule_Date'])
df['Out_Date'] = pd.to_datetime(df['Out_Date'])
# ✅ 计算日期差(返回 Timedelta 类型),再提取天数
df['days_alert'
] = (df['Out_Date'] - df['Schedule_Date']).dt.days
print(df)输出结果:
ID Schedule_Date Out_Date days_alert rank1 089 2025-02-06 00:00:00+00:00 2025-02-08 00:00:00+00:00 2 rank2 983 2025-03-17 00:00:00+00:00 2025-04-27 00:00:00+00:00 41 rank3 037 2025-02-02 00:00:00+00:00 2025-05-24 00:00:00+00:00 112 rank4 654 2025-08-14 00:00:00+00:00 2025-02-26 00:00:00+00:00 -170
⚠️ 注意事项与最佳实践:
- 不要用 datetime.strptime() 处理整个 Series:strptime 是单值函数,对 pandas Series 会报错;若坚持使用,需配合 apply(),但性能远低于向量化的 pd.to_datetime()。
- 时区一致性很重要:Z 表示 UTC,pd.to_datetime() 会自动将其解析为带时区的 datetime64[ns, UTC]。若后续需转换为本地时区,可用 .dt.tz_convert('Asia/Shanghai')。
- 处理缺失值(NaN):pd.to_datetime() 默认将无效值转为 NaT(Not a Time),减法结果也为 NaT,.dt.days 会返回 NaN —— 符合预期,无需额外清洗。
- 性能提示:若数据量极大(千万级),可添加 infer_datetime_format=True 加速解析(但仅适用于标准格式)。
总结:pd.to_datetime() 是处理 ISO 时间字符串的首选工具,它简洁、鲁棒、支持时区且完全向量化。牢记“先转换、再计算”的原则,即可高效完成日期差分析任务。
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- mac怎么退出id_MAC退出iCloud账号与A
- php485返回空数组怎么回事_php485数据接
- 跨文件调用类方法怎么用_php作用域操作符与自动加
- 如何将竖排文本文件转换为横排字符串
- c++ reinterpret_cast怎么用 c
- Linux如何安装Golang环境_Linux下G
- GML (Geography Markup Lan
- Win10如何更改开机密码_Windows10登录
- Python如何创建带属性的XML节点
- PHP cURL GET请求:正确设置认证与自定义
- Windows10电脑怎么设置虚拟内存_Win10
- Mac如何修改Hosts文件?(本地开发与屏蔽网站
- 如何使用Golang template生成文本模板
- 如何在 Django 中修改用户密码后保持会话不丢
- Mac如何与安卓手机传文件_Mac和Android
- 如何使用Golang实现Web表单数据绑定_自动映
- C++如何使用Qt创建第一个GUI窗口?(入门教程
- 静态属性修改会影响所有实例吗_php作用域操作符下
- Win11如何设置系统声音_Win11系统声音调整
- Python高性能计算项目教程_NumPyCyth
- php怎么下载安装后无法解析php文件_服务器配置
- Win11怎么关闭自动修复_跳过Win11开机自动
- php中常量能用::访问吗_类常量与作用域操作符使
- php增删改查报错1054怎么办_字段名错误排查修
- php怎么连接数据库_MySQL数据库连接的基础代
- 如何在Windows中创建新的用户账户?(标准与管
- Win11怎么关闭应用权限_Windows11相机
- php485函数执行慢怎么优化_php485性能提
- Mac怎么给文件夹加密_Mac创建加密磁盘映像教程
- Win11右键反应慢怎么办 Win11优化右键菜单
- Windows系统文件被保护机制阻止怎么办_权限不
- MAC如何设置网卡MAC地址克隆_MAC终端修改物
- php485返回数据不完整怎么办_php485数据
- MAC如何安装Git版本控制工具_MAC开发环境配
- PowerShell怎么创建复杂的XML结构
- Win11怎么关闭VBS安全性_Windows11
- Win10怎么卸载迅雷_Win10彻底卸载迅雷方法
- Go 中的 := 运算符:类型推导机制与使用边界详
- 如何开启Windows的远程服务器管理工具(RSA
- Win11怎么退出微软账户_切换Win11为本地账
- Win11怎么更改管理员名字 Win11修改账户名
- Python邮件系统自动化教程_批量发送解析与模板
- Win10怎样卸载自带Edge_Win10卸载Ed
- 如何使用Golang模拟请求超时_Golang c
- Win11如何设置电源计划_Win11电源计划优化
- Win11讲述人怎么关闭_Win11误触开启语音朗
- 如何在 PHP 单元测试中正确模拟带方法的图像处理
- Win10怎么创建桌面快捷方式 Win10为应用创
- Win10如何关闭安全中心所有通知 Win10禁用
- 如何使用Golang实现文件加密_Golang c

] = (df['Out_Date'] - df['Schedule_Date']).dt.days
print(df)
QQ客服