代码之家  ›  专栏  ›  技术社区  ›  Fabiano Battaglin

将字符串转换为时间(h:m:s),以便我可以减去它们

  •  1
  • Fabiano Battaglin  · 技术社区  · 7 年前

    我从一个XLS文件中导入了一些数据,该文件有两列,其中包含字符串格式的时间信息。示例:04:15:45(即4小时、15分钟和45秒)。

    接下来我把它转换成数据时间

    df['column'] = pd.to_datetime(df['column'], errors='coerce')
    

    我有这样的东西 2019-01-09 04:15:45 这不完全是我想要的,但没关系(我更喜欢格式为%h%m%s)。我对另一个具有相同特性的列做同样的事情。 接下来,我创建了一个新列,其中包含了它们之间的区别:

    df['new column'] =  df['column1'] - df['column2']
    

    但是,当我尝试同时减去这两个值时,得到如下结果: -1 days +23:00:00 当我真正想要的是 00:16:12 ,仅包含%h%m%s中的差异。

    从算法上讲,期望的结果是:

    (time planned) - (time it actually took) = (difference format 00:18:12)
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   Grr    7 年前

    您可以在几秒钟内将输出转换为差分。

    df = pd.DataFrame({'t1': ['1:13:14', '2:34:56', '2:44:32'], 't2': ['1:15:00', '2:37:00', '3:00:00']})
    df.t1 = pd.to_timedelta(df.t1)
    df.t2 = pd.to_timedelta(df.t2)
    df
            t1       t2
    0  1:13:14  1:15:00
    1  2:34:56  2:37:00
    2  2:44:32  3:00:00
    
    df['t_diff'] = (df.t1 - df.t2).dt.total_seconds()
    
            t1       t2  t_diff
    0 01:13:14 01:15:00  -106.0
    1 02:34:56 02:37:00  -124.0
    2 02:44:32 03:00:00  -928.0