获取卡车名称并汇总时长时出现Timedelta转int报错如何解决
卡车产能分析代码报错修复方案
报错原因
抛出的错误如下:int() argument must be a string, a bytes-like object or a number, not 'Timedelta'
该错误的核心诱因是存储结果的变量X预先被定义为仅支持数值类型的结构(如整数数组、数值型列表),而df.Duration.sum()返回的是Timedelta时间差类型,无法自动转换为整数存入X,触发类型不匹配。
修复方案
方案1:适配现有循环逻辑
仅需调整X的初始化逻辑,也可根据需求将求和后的Timedelta转换为对应单位的数值(如总秒数、总小时数)后存入:
# 原代码中初始化X的部分替换为如下空列表 X = [] for i in range(N_Vehicles): dur_sum = df[df['Vehicle ID'] == vehicles['Vehicle ID'][i]].Duration.sum() X.append(dur_sum) # 若需转为总小时数值,可将append行替换为: # X.append(dur_sum.total_seconds() / 3600)
方案2:使用pandas groupby优化(推荐)
无需手动写循环、去重匹配,代码更简洁执行效率更高,可直接替换你现有所有计算逻辑:
# 按车辆ID分组直接求和时长,返回索引为车辆ID、值为总时长的Series X = df.groupby('Vehicle ID')['Duration'].sum() # 若需转为总小时数值,修改为如下写法: # X = df.groupby('Vehicle ID')['Duration'].sum().dt.total_seconds() / 3600
内容的提问来源于stack exchange,提问作者Jonatan Polanco
相关产品推荐
相关产品推荐

