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
相关产品推荐
相关产品推荐

