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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:31:32