【问题标题】:Calculate the Time Difference in Second以秒计算时差
【发布时间】:2019-04-08 00:02:54
【问题描述】:

我有一个数据框,其中最后两列是指时钟时间。两列的DataType都是String。

示例数据如下所示:

PROCESS_N   VAL     DATE        TIME_1      TIME_2
35324399    74.95   02/11/18    12:45:26    12:30:36
35324399    74.95   02/11/18    12:45:26    12:35:36
35334154    74.95   02/11/18    12:45:27    12:36:22
35338698    74.95   02/11/18    12:45:28    12:38:30
35338698    74.95   02/11/18    12:45:28    12:38:32
35347905    74.95   02/11/18    12:45:30    12:39:36
35367939    74.95   02/11/18    12:45:30    12:39:39
35371892    74.95   02/11/18    12:45:31    12:39:55

我想在 Dataframe 的末尾填充另一列,以秒为单位的 TIME_1 和 TIME_2 的差异。

【问题讨论】:

  • 您可以尝试差异并提取总秒数 df["time3"] = (df["time2]-df["time1"]).dt.total_seconds

标签: python python-3.x pandas datetime dataframe


【解决方案1】:

您可以简单地使用to_datetime()方法转换然后取差:

df['diff'] = pd.to_datetime(df['TIME_1']) - pd.to_datetime(df['TIME_2'])

如果您希望它在几秒钟内存储,您可以像这样转换它:

df['diff'] = df['diff'].astype('timedelta64[s]')

输出:

  PROCESS_N    VAL      DATE    TIME_1    TIME_2   diff
0   35324399  74.95  02/11/18  12:45:26  12:30:36  890.0
1   35324399  74.95  02/11/18  12:45:26  12:35:36  590.0
2   35334154  74.95  02/11/18  12:45:27  12:36:22  545.0
3   35338698  74.95  02/11/18  12:45:28  12:38:30  418.0
4   35338698  74.95  02/11/18  12:45:28  12:38:32  416.0
5   35347905  74.95  02/11/18  12:45:30  12:39:36  354.0
6   35367939  74.95  02/11/18  12:45:30  12:39:39  351.0
7   35371892  74.95  02/11/18  12:45:31  12:39:55  336.0

【讨论】:

    【解决方案2】:

    使用timedelta 的秒数差异 -

    df['Diff'] = (df['TIME_1']-df['TIME_2']).astype('timedelta64[s]')
    

    输出

       PROCESS_N    VAL      DATE              TIME_1              TIME_2   Diff
    0   35324399  74.95  02/11/18 1900-01-01 12:45:26 1900-01-01 12:30:36  890.0
    1   35324399  74.95  02/11/18 1900-01-01 12:45:26 1900-01-01 12:35:36  590.0
    2   35334154  74.95  02/11/18 1900-01-01 12:45:27 1900-01-01 12:36:22  545.0
    3   35338698  74.95  02/11/18 1900-01-01 12:45:28 1900-01-01 12:38:30  418.0
    4   35338698  74.95  02/11/18 1900-01-01 12:45:28 1900-01-01 12:38:32  416.0
    5   35347905  74.95  02/11/18 1900-01-01 12:45:30 1900-01-01 12:39:36  354.0
    6   35367939  74.95  02/11/18 1900-01-01 12:45:30 1900-01-01 12:39:39  351.0
    7   35371892  74.95  02/11/18 1900-01-01 12:45:31 1900-01-01 12:39:55  336.0
    

    如果您有str,请在计算差异之前先转换为日期 -

    df['TIME_1'] = pd.to_datetime(df['TIME_1'],format='%H:%M:%S')
    df['TIME_2'] = pd.to_datetime(df['TIME_2'],format='%H:%M:%S')
    

    【讨论】:

      【解决方案3】:

      看看将您的两个数字转换为datetime objects 并从另一个减少一个,如下所示:

      import datetime as dt
      
      time1 = dt.datetime(2018,12,30,23,59,59)
      time2 = dt.datetime(2018,12,31,23,59,59)
      
      (time2-time1).total_seconds()
      

      (source)

      【讨论】:

        【解决方案4】:

        如果您知道如何使用数据框,那么此代码将对您有所帮助:

        import datetime
        import time
        
        x1 = time.strptime('12:45:26,000'.split(',')[0], '%H:%M:%S')
        x2 = time.strptime('12:30:36,000'.split(',')[0], '%H:%M:%S')
        delta_x = datetime.timedelta(hours=x1.tm_hour - x2.tm_hour, minutes=x1.tm_min - 
        x2.tm_min, seconds=x1.tm_sec - x2.tm_sec).total_seconds()
        print(delta_x)
        

        【讨论】:

          【解决方案5】:

          您可以使用pd.to_timedelta,然后访问pd.Series.dt.seconds

          time_cols = ['TIME_1', 'TIME_2']
          df[time_cols] = df[time_cols].apply(pd.to_timedelta)
          
          df['Diff'] = (df['TIME_1'] - df['TIME_2']).dt.seconds
          
          print(df)
          
             PROCESS_N    VAL      DATE   TIME_1   TIME_2  Diff
          0   35324399  74.95  02/11/18 12:45:26 12:30:36   890
          1   35324399  74.95  02/11/18 12:45:26 12:35:36   590
          2   35334154  74.95  02/11/18 12:45:27 12:36:22   545
          3   35338698  74.95  02/11/18 12:45:28 12:38:30   418
          4   35338698  74.95  02/11/18 12:45:28 12:38:32   416
          5   35347905  74.95  02/11/18 12:45:30 12:39:36   354
          6   35367939  74.95  02/11/18 12:45:30 12:39:39   351
          7   35371892  74.95  02/11/18 12:45:31 12:39:55   336
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-02-06
            • 1970-01-01
            • 2021-12-06
            • 2018-07-30
            相关资源
            最近更新 更多