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

Pandas中dt.time()类型转换为timedelta类型报错如何解决

问题根因
  • 核心错误出在最后一行转换代码:你写的pd.to_timedelta(['Time'])传入的是仅包含字面字符串'Time'的Python列表,没有引用DataFrame中的实际Time列,pandas尝试将字符串"Time"本身转换为时间差类型,必然触发类型转换错误。
  • 即使修正列引用,直接对dt.time生成的原生datetime.time对象调用pd.to_timedelta也存在兼容问题:原生time对象绑定日期锚点,无法直接映射为无日期的纯时间差格式。
修复方案

不需要先拆分出dt.time类型再做二次转换,直接从原始时间列计算得到timedelta类型的时间值是最稳定高效的写法,修正后完整代码如下:

# 提取日期列
df['Dates'] = pd.to_datetime(df['Date/Time (earliest)']).dt.date
# 用原始时间减去当日0点时间,得到的差值就是纯时间长度的timedelta类型
df['Time'] = pd.to_datetime(df['Date/Time (earliest)']) - pd.to_datetime(df['Dates'])

效果说明

  • 转换完成后执行print(df['Time'].dtype),会输出timedelta64[ns],为pandas标准时间差类型。
  • 该列直接支持数值比较操作,比如需要剔除早于6点、晚于22点的数据,可以直接写筛选逻辑:
    # 仅保留6点到22点之间的数据
    df = df[df['Time'].between(pd.Timedelta(hours=6), pd.Timedelta(hours=22))]
    
  • 如果你一定要基于已经生成的dt.time列做转换,可以先将time对象转为字符串再传入转换函数,但该方法效率更低、对异常值容错差,不推荐使用:
    df['Time'] = pd.to_timedelta(df['Time'].astype(str))
    

内容的提问来源于stack exchange,提问作者Addi O

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 21:48:14