如何用Pandas计算DataFrame两个datetime列的分钟级时间差?
实现分钟级行程时长计算的修正方法
问题根源
你当前的代码存在三处问题,导致输出不符合预期:
- 语法错误:新增列的字段名字符串未闭合,你写的是
df['trip_duration],少了字段名后的单引号,实际运行时会直接触发语法报错。 - 时间差的计算顺序颠倒。计算两时间点的间隔时长,逻辑上应为结束时间 - 开始时间,你当前代码是用开始时间减结束时间,方向完全相反,因此跨天的样本会出现带
-1 days的特殊时间差格式(比如你得到的-1 days +23:32:00等价于实际间隔-28分钟),数值符号与实际时长相反。 - 未对计算结果做单位转换。两个datetime列直接相减得到的是
Timedelta类型的时间间隔对象,不是你需要的、以分钟为单位的纯数值列。
可直接运行的修正代码
# 先将两个原始文本列统一转换为pandas可识别的datetime类型 start_time = pd.to_datetime(df['Start date']) end_time = pd.to_datetime(df['End date']) # 按正确顺序计算间隔,并将所有时间维度折算为纯分钟数值 df['trip_duration'] = (end_time - start_time).dt.total_minutes()
注:必须使用
total_minutes()方法做转换,不能直接取秒数/小时数做换算——如果只取seconds属性做计算,跨天的时间差会遗漏“天”维度的折算,导致结果严重偏差。
对应你示例数据的输出结果
按照上述代码运行后,生成的trip_duration列值为:
- 第一行:28.0 分钟(11/30 23:58 到 12/01 0:26 的实际间隔)
- 第二行:5.0 分钟(11/30 23:56 到 12/01 0:01 的实际间隔)
- 第三行:18.0 分钟(11/30 23:18 到 11/30 23:36 的实际间隔)
内容的提问来源于stack exchange,提问作者mike_duaud
相关产品推荐
相关产品推荐

