如何将pandas计算得到的时间差转换为十进制时间格式
解决方案
建议你优先跳过转字符串截取的步骤,直接基于Picking Time的timedelta格式计算十进制时间,运算效率更高也不会出现边界错误:
方案1:基于timedelta直接计算(推荐)
两个datetime相减得到的是pandas的timedelta类型,直接调用dt.total_seconds()获取总秒数后按需要的单位换算即可:
- 转十进制小时(例:1小时15分30秒 = 1.2583小时)
# 1小时=3600秒,总秒数除以3600即可 data['Picking Time Decimal(H)'] = data['Picking Time'].dt.total_seconds() / 3600
- 转十进制分钟(例:1小时15分30秒 = 75.5分钟)
# 1分钟=60秒,总秒数除以60即可 data['Picking Time Decimal(M)'] = data['Picking Time'].dt.total_seconds() / 60
方案2:如果已经完成字符串截取,可按如下方法转换
如果你的业务逻辑必须保留字符串格式的Picking Time,可以把字符串拆分后换算:
def time_str_to_decimal(time_str): # 拆分时、分、秒 hour, minute, second = map(int, time_str.split(":")) # 按十进制小时换算,需要其他单位可自行调整公式 return hour + minute / 60 + second / 3600 data['Picking Time Decimal'] = data['Picking Time'].apply(time_str_to_decimal)
注意:之前用字符串切片
x[7:]的处理逻辑会丢失超过1天的时长数据,如果存在拣货时长跨天的场景,建议删除字符串转换步骤,直接用方案1处理。
内容的提问来源于stack exchange,提问作者SamePop20
相关产品推荐
相关产品推荐

