如何在Python Pandas中计算两列时间差值并解决类型报错?
Pandas计算时间列差值解决方法
错误原因
datetime.time类型本身不支持减法运算,直接用sub或者-操作都会触发类型不兼容的报错。
解决方法
方法1:转成datetime.datetime类型计算
如果你的时间列只有时间(无日期),可以给它们拼接一个默认日期(比如当天),转成完整的datetime类型后再计算差值:
import pandas as pd from datetime import date # 给time类型列拼接当天日期,转成datetime格式 df_null['start_dt'] = pd.to_datetime(f"{date.today()} " + df_null['starttime'].astype(str)) df_null['end_dt'] = pd.to_datetime(f"{date.today()} " + df_null['endtime'].astype(str)) # 计算时间差,结果为timedelta类型(可直接查看时/分/秒差值) df_null['Total'] = df_null['end_dt'] - df_null['start_dt']
方法2:转成总秒数计算差值
如果只需要数值形式的时间差(比如总秒数、小时数),可以把时间转成当天的总秒数再做减法:
# 定义函数将time类型转成当天总秒数 def time_to_sec(time_val): return time_val.hour * 3600 + time_val.minute * 60 + time_val.second # 计算秒数差值 df_null['Total_sec'] = df_null['endtime'].apply(time_to_sec) - df_null['starttime'].apply(time_to_sec) # 按需转成小时数 df_null['Total_hour'] = df_null['Total_sec'] / 3600
方法3:重新读取数据时解析为datetime类型
如果你的原始数据其实包含日期,只是读入时被识别成了time类型,可直接在读取阶段指定解析为datetime:
# 读取文件时指定解析目标列为datetime类型 df_null = pd.read_csv("your_data.csv", parse_dates=['starttime', 'endtime']) # 直接计算时间差 df_null['Total'] = df_null['endtime'] - df_null['starttime']
内容的提问来源于stack exchange,提问作者jislesplr
相关产品推荐
相关产品推荐

