Pandas从现有列创建新日期时间列报错,求原因与修复方法
解决Pandas中创建新datetime列的ValueError问题
嘿,这个错误我之前踩过坑!问题出在你使用pd.Timedelta的方式上——它不支持直接传入整个Pandas Series(也就是你的df.total_waiting_days列),它只能处理单个的数值、字符串或timedelta对象,所以当你把整列丢进去的时候,就会抛出那个ValueError。
修复方法(优先推荐第一种)
方法1:使用pd.to_timedelta(向量化操作,性能最优)
pd.to_timedelta是专门为批量处理时间增量设计的函数,完美支持Series输入:
import pandas as pd # 先确保start_date是datetime类型 df['start_date'] = pd.to_datetime(df['start_date']) # 用pd.to_timedelta把整列转换成Timedelta对象,再和start_date相加 df['end_date'] = df['start_date'] + pd.to_timedelta(df['total_waiting_days'], unit='D')
方法2:用apply逐行处理(适合小数据集)
如果数据量不大,也可以用apply逐行调用pd.Timedelta,不过这种方法是逐行循环,性能不如向量化操作:
df['end_date'] = df.apply( lambda row: row['start_date'] + pd.Timedelta(row['total_waiting_days'], unit='D'), axis=1 )
为什么原代码出错?
原代码里pd.Timedelta(df.total_waiting_days, unit='D')试图让pd.Timedelta处理一整列数据,但它的接口只接受单个值,所以无法识别整个Series,就会报错“Value must be Timedelta, string, integer, float, timedelta or convertible”。
内容的提问来源于stack exchange,提问作者Edamame
相关产品推荐
相关产品推荐

