Pandas无法对时间对象执行减法?创建Trip_Time列时持续报错
解决Pandas计算行程时长报错的问题
问题根源
你把ATD和ATA转成了datetime.time类型,而Python的time对象不支持直接减法运算,这就是报错的核心原因。
修正方案:保留完整Datetime对象
直接将时间转换为完整的datetime对象(默认日期不影响时间差计算),就能直接相减得到时间差:
from datetime import datetime import pandas as pd import numpy as np # 读取数据,无需提前转字符串,pd.to_datetime可直接处理数字格式的时间 df = pd.read_csv('log_may.csv') # 转换为完整datetime对象(默认日期为1900-01-01,不影响时间差计算) df['ATD'] = pd.to_datetime(df['ATD'], format='%H%M') df['ATA'] = pd.to_datetime(df['ATA'], format='%H%M') # 计算行程时长,结果为timedelta类型(可直接显示时分秒) df['Trip_Time'] = df['ATA'] - df['ATD'] # 可选:转换为分钟数(方便后续数值分析) df['Trip_Time_Minutes'] = df['Trip_Time'].dt.total_seconds() / 60
另一种思路:转成Timedelta类型
如果不想保留日期部分,也可以直接把时间转成当天的时间差(Timedelta):
df = pd.read_csv('log_may.csv') # 把数字格式的时间转成HH:MM:SS字符串,再转换为Timedelta def time_to_timedelta(time_val): time_str = str(time_val).zfill(4) # 确保是4位格式,比如900补为0900 return pd.to_timedelta(f"{time_str[:2]}:{time_str[2:]}:00") df['ATD'] = df['ATD'].apply(time_to_timedelta) df['ATA'] = df['ATA'].apply(time_to_timedelta) df['Trip_Time'] = df['ATA'] - df['ATD']
样例数据运行结果
针对你提供的测试数据,最终输出会是:
| ATD | ATA | Trip_Time | Trip_Time_Minutes |
|---|---|---|---|
| 0900 | 1010 | 0 days 01:10:00 | 70.0 |
内容的提问来源于stack exchange,提问作者user17332177
相关产品推荐
相关产品推荐

