如何在 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; ?>
】
相关推荐
- Win10如何更改任务栏高度_Windows10解
- 如何使用Golang匿名函数_快速定义临时函数逻辑
- Mac怎么安装软件_Mac安装dmg与pkg文件的
- 如何用正则与预处理高效拦截带干扰符的恶意域名
- 如何使用Golang构建基础消息队列模拟_Gola
- php订单日志怎么在swoole写_php协程sw
- Win11鼠标灵敏度怎么调 Win11鼠标指针移动
- Win11怎么开启上帝模式_创建Windows 1
- php8.4新语法match怎么用_php8.4m
- Win11无法安装软件怎么办_Win11解除应用安
- Python网络超时处理_健壮性设计说明【指导】
- php嵌入式需要什么环境_搭建php+linux嵌
- Win11怎么恢复误删照片_Win11数据恢复工具
- Win11搜索栏无法输入_解决Win11开始菜单搜
- 如何使用正则表达式提取以编号开头、后接多个注解的逻
- 如何在Golang中指定模块版本_使用go.mod
- Win11快速助手怎么用_Win11远程协助连接教
- MySQL 中使用 IF 和 CASE 实现查询字
- C++如何将C风格字符串(char*)转换为std
- Win10怎么更改用户名 Win10修改账户名称操
- Mac如何调整Dock栏大小和位置_Mac程序坞个
- 如何使用Golang recover捕获panic
- Go语言中slice追加操作的底层共享机制解析
- 如何在Golang中配置代码格式化工具_使用gof
- Django 测试数据库表缺失与字段未创建问题的完
- Python网页解析流程_html结构说明【指导】
- 短链接怎么用php递归还原_多层加密链接的处理法【
- Win11怎么设置桌面图标间距_Windows11
- Win10闹钟铃声怎么自定义 Win10闹钟自定义
- php下载安装后swoole扩展怎么安装_异步框架
- PHP 中 require() 语句返回值的用法详
- Win11怎么更改输入法顺序_Win11调整语言首
- PHP 中如何在函数内持久化修改引用变量的指向
- Go 语言标准库为何不提供泛型 Contains
- 短链接怎么用php还原_从基础原理到代码实现教学【
- Windows10电脑怎么连接蓝牙设备_Win10
- Python迭代器生成器进阶教程_节省内存与懒加载
- C#怎么创建控制台应用 C# Console Ap
- 如何在Golang中处理URL参数_Golang
- 如何在Golang中使用闭包_封装变量与函数作用域
- 如何使用Golang构建简易投票统计功能_Gola
- VSC怎么创建PHP项目_从零开始搭建项目的步骤【
- Win11怎么开启空间音效_Windows11耳机
- Win11怎么设置闹钟_Windows 11时钟应
- Python函数参数高级用法_默认值与可变参数解析
- C++中的constexpr和const有什么区别
- 一文详解网站被黑客入侵挂马解决办法
- Linux如何使用grep搜索文件内容_Linux
- Python字符串操作教程_切片拼接与格式化详解
- Win11怎么清理C盘系统日志_Win11清理系统

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