在Azure ML中计算两个日期天数差时遇值错误问题求助
解决Pandas计算日期差的ValueError问题
嘿,我一眼就看出问题出在哪了——你踩了个新手常犯的坑:把Pandas的日期序列直接转成字符串,再用datetime.strptime解析,这完全没必要,还直接导致了错误!
错误根源
当你执行str(d1)时,把整个Pandas的DatetimeSeries转换成了带索引的多行字符串(就是报错信息里那些带行号的日期内容),但datetime.strptime只能处理单个日期字符串,它根本没法解析这种带索引的多行文本,所以才抛出了ValueError。
正确的实现方式
Pandas本身就支持日期类型的直接运算,完全不需要借助datetime模块的strptime多此一举。直接按下面的步骤来:
1. 确保日期列是datetime类型
先把Order Date和Dispatch Date列转换成Pandas的datetime类型(如果还没转的话):
import pandas as pd # 转换日期列 dataframe1['Order Date'] = pd.to_datetime(dataframe1['Order Date']) dataframe1['Dispatch Date'] = pd.to_datetime(dataframe1['Dispatch Date'])
2. 计算天数差
直接对两个日期列做减法,再用.dt.days提取天数:
# 计算天数差 dataframe1['Days_difference'] = (dataframe1['Dispatch Date'] - dataframe1['Order Date']).dt.days
3. 计算月份差(如果需要)
如果你的需求是计算月份差(注意:月份差和天数差逻辑不同,因为不同月份天数不一样),可以用两种方法实现:
方法一:用relativedelta
from dateutil.relativedelta import relativedelta dataframe1['Months_difference'] = dataframe1.apply( lambda row: relativedelta(row['Dispatch Date'], row['Order Date']).months, axis=1 )
方法二:用Pandas周期运算
# 转成月份周期后计算差值 dataframe1['Months_difference'] = ( dataframe1['Dispatch Date'].dt.to_period('M') - dataframe1['Order Date'].dt.to_period('M') ).apply(lambda x: x.n)
这样就能完美解决你的问题,代码简洁高效,完全不会出现之前的错误~
内容的提问来源于stack exchange,提问作者Veera Venkata Durga Jagadeesh
相关产品推荐
相关产品推荐

