You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python处理UTC格式日期并计算日期差值的问题及解决方法

解决Pandas中ISO格式日期字符串差值计算的问题

你的核心问题是日期列还保持字符串类型,直接相减自然会触发类型错误。下面给你几个可行的解决方法:

方法1:用Pandas自带的to_datetime自动转换(推荐)

Pandas的pd.to_datetime()可以自动识别yyyy-mm-ddT00:00:00.000Z这种ISO标准日期格式,不需要手动指定格式,代码最简洁:

# 先将两个日期列转换为datetime类型
df['Schedule_Date'] = pd.to_datetime(df['Schedule_Date'])
df['Out_Date'] = pd.to_datetime(df['Out_Date'])

# 计算日期差值并提取天数
df['days_alert'] = (df['Out_Date'] - df['Schedule_Date']).dt.days

方法2:手动指定日期格式(避免自动识别出错)

如果自动识别失效(比如格式有特殊变种),可以手动指定匹配的格式字符串:

# 指定格式:%Y是4位年份,%f是毫秒,%Z匹配时区标识Z
date_format = "%Y-%m-%dT%H:%M:%S.%fZ"
df['Schedule_Date'] = pd.to_datetime(df['Schedule_Date'], format=date_format)
df['Out_Date'] = pd.to_datetime(df['Out_Date'], format=date_format)

df['days_alert'] = (df['Out_Date'] - df['Schedule_Date']).dt.days

为什么你之前的尝试失败?

你用dt.datetime.strptime(df['columnname'], "%y%m%d")出错有两个原因:

  • 格式字符串%y%m%d和你的日期格式yyyy-mm-ddT00:00:00.000Z完全不匹配,%y是2位年份,而且没有匹配T、Z这些字符;
  • datetime.strptime只能处理单个字符串,不能直接作用于Pandas的Series,要处理Series得用df['columnname'].apply(lambda x: dt.datetime.strptime(x, 正确格式)),但这远不如pd.to_datetime高效。

修改后的完整测试代码

import pandas as pd
import datetime as dt

# 初始化数据
data = {'ID': ['089', '983', '037', '654'],
        'Schedule_Date': ['2024-02-06T00:00:00.000Z', '2024-03-17T00:00:00.000Z', '2024-02-02T00:00:00.000Z', '2024-08-14T00:00:00.000Z'],
        'Out_Date': ['2024-02-08T00:00:00.000Z', '2024-04-27T00:00:00.000Z', '2024-05-24T00:00:00.000Z', '2024-02-26T00:00:00.000Z']}

df = pd.DataFrame(data, index=['rank1', 'rank2', 'rank3', 'rank4'])

# 转换日期列类型
df['Schedule_Date'] = pd.to_datetime(df['Schedule_Date'])
df['Out_Date'] = pd.to_datetime(df['Out_Date'])

# 计算天数差
df['days_alert'] = (df['Out_Date'] - df['Schedule_Date']).dt.days

print(df)

运行后会得到正确的天数差值结果,比如第一条数据的days_alert是2,符合预期。

内容的提问来源于stack exchange,提问作者Ty Kendall

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 21:22:42