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

pd.to_timedelta运算失败排障:字符串与Timedelta无法相减错误

解决TypeError: unsupported operand type(s) for -: 'str' and 'Timedelta'问题

之前正常运行的代码:

for RxDat in df2:
       condition = (df['Tdate'] > RxDat - pd.to_timedelta(46, unit="D")) & (df['Tdate'] < RxDat)

现在触发报错:

TypeError: unsupported operand type(s) for -: 'str' and 'Timedelta'

相关数据示例:

  • df['Tdate']内容:
[Timestamp('2004-08-25 00:00:00'), Timestamp('2004-10-13 00:00:00'), Timestamp('2004-12-13 00:00:00'), Timestamp('2005-02-21 00:00:00'), Timestamp('2005-04-28 00:00:00'), Timestamp('2005-08-24 00:00:00')]
  • df2['RxDate']内容:
[Timestamp('2004-08-20 00:00:00'), Timestamp('2004-08-23 00:00:00'), Timestamp('2004-08-18 00:00:00'), Timestamp('2004-08-15 00:00:00'), Timestamp('2004-08-12 00:00:00'), Timestamp('2004-08-13 00:00:00')]

错误原因

直接遍历df2时,迭代的是DataFrame的列名(字符串类型),而不是RxDate列里的Timestamp值。哪怕df2['RxDate']存的是时间戳,循环取到的还是列名字符串,自然无法和Timedelta执行减法运算。

修复方案

修改循环,直接遍历df2['RxDate']的具体值:

for RxDat in df2['RxDate']:
       condition = (df['Tdate'] > RxDat - pd.to_timedelta(46, unit="D")) & (df['Tdate'] < RxDat)

额外验证步骤

如果还是报错,先确认RxDate列的类型是否为datetime:

print(df2['RxDate'].dtype)
# 正常输出应为 datetime64[ns],若不是则转换:
df2['RxDate'] = pd.to_datetime(df2['RxDate'])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 15:37:49