You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python计算两列指定格式日期时间列的相对时间差

错误原因说明
  • 两列当前存储的是格式为日-月-年:时.分的纯文本字符串,不支持直接做减法运算,因此触发字符串无法相减的类型报错
  • 使用int(A) - int(B)失败的核心原因:A、B是pandas的Series结构对象,int()方法无法直接对整个Series做整数转换,且字符串混杂了日期符号、冒号、横杠,本身不满足整数转换的格式要求
正确实现方法
  1. 按照字符串的实际结构,用pandas内置的时间解析方法向量化转换两列为datetime类型
    你的数据匹配的时间格式标记为%d-%m-%Y:%H.%M(对应日-月-年:时.分的结构,如示例值31-12-2010:10.06会被解析为2010年12月31日10时06分)
    转换代码:
    import pandas as pd
    
    # 逐列完成字符串到时间格式的转换
    df['A'] = pd.to_datetime(df['A'], format='%d-%m-%Y:%H.%M')
    df['B'] = pd.to_datetime(df['B'], format='%d-%m-%Y:%H.%M')
    
  2. 直接按需求计算A - B的时间差,得到的结果为pandas Timedelta类型,可直接参与后续计算:
    df['time_delta'] = df['A'] - df['B']
    
    以你给出的示例数据为例,计算结果为-6 days +18:54:00,本质等价于A列时间比B列时间早5天5小时6分。
  3. 若需要将时间差转换为可直接运算的数值指标(如总小时、总分钟数),可调用dt属性的对应方法提取:
    # 转换为总小时数(保留正负方向)
    df['diff_total_hours'] = df['time_delta'].dt.total_seconds() / 3600
    # 转换为总分钟数(保留正负方向)
    df['diff_total_minutes'] = df['time_delta'].dt.total_seconds() / 60
    
注意事项
  • 不需要写循环逐行解析数据,pandas的pd.to_datetime是向量化操作,处理大表时效率远高于逐行遍历
  • 解析时一定要指定和实际字符串完全匹配的format参数,既可以提升解析速度,也能避免格式不匹配导致的解析错误

内容的提问来源于stack exchange,提问作者K C

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.27 21:45:06