如何在 Pandas 中获取时间差的分钟数

3

I have following dataframe in pandas

  code     start_time      end_time
  0        13:00:09        13:30:09
  1        14:23:33        15:23:23
  2        11:30:00        12:30:00

start_timeend_time是对象类型。

我想要获取这两列之间的分钟差。我正在使用Pandas执行以下操作:

df['time_diff'] = pd.Timestamp(df['start_time']) - pd.Timestamp(df['end_time'])   

开始时间减去结束时间不对吗? - jezrael
这篇文章 https://dev59.com/qWQn5IYBdhLWcg3wg3WR 可以帮助你。 - Eswar
1个回答

5

使用 to_datetime 函数将列转换为日期时间格式,或使用to_timedelta函数将其转换为时间差值格式,使用sub函数进行减法运算,再使用total_seconds将输出的时间差值转换为总秒数并除以60

start_time = pd.to_datetime(df['start_time'].astype(str)) 
end_time = pd.to_datetime(df['end_time'].astype(str))

#another solution
#start_time = pd.to_timedelta(df['start_time'].astype(str)) 
#end_time = pd.to_timedelta(df['end_time'].astype(str))

df['time_diff'] = start_time.sub(end_time).dt.total_seconds().div(60)
print (df)
   code start_time  end_time  time_diff
0     0   13:00:09  13:30:09 -30.000000
1     1   14:23:33  15:23:23 -59.833333
2     2   11:30:00  12:30:00 -60.000000

如果将结束时间与开始时间交换:
df['time_diff'] = end_time.sub(start_time).dt.total_seconds().div(60)
print (df)
   code start_time  end_time  time_diff
0     0   13:00:09  13:30:09  30.000000
1     1   14:23:33  15:23:23  59.833333
2     2   11:30:00  12:30:00  60.000000

示例:

import datetime

df = pd.DataFrame({'code': [0, 1, 2], 
                  'start_time': [datetime.time(13, 0, 9), datetime.time(14, 23, 33), 
                                 datetime.time(11, 30)], 
                   'end_time': [datetime.time(13, 30, 9), datetime.time(15, 23, 23),
                                datetime.time(12, 30)]})

print (df)
   code start_time  end_time
0     0   13:00:09  13:30:09
1     1   14:23:33  15:23:23
2     2   11:30:00  12:30:00

感谢Anton vBR提供的评论中的IDE:

start_time = pd.to_timedelta(df['start_time'].astype(str)).dt.total_seconds()
end_time = pd.to_timedelta(df['end_time'].astype(str)).dt.total_seconds()

df['time_diff'] = end_time.sub(start_time).div(60)
print (df)
   code start_time  end_time  time_diff
0     0   13:00:09  13:30:09  30.000000
1     1   14:23:33  15:23:23  59.833333
2     2   11:30:00  12:30:00  60.000000

它给我返回以下错误:<class 'datetime.time'> 无法转换为 datetime - Neil
@Neil - 然后需要通过 .astype(str) 将其转换为字符串。 - jezrael
1
哎呀,我以为它们是同一件事情,你不小心复制粘贴了两次。抱歉。 - cs95
@Neil - 给我一秒钟来准备示例。 - jezrael
1
说实话,当我看到时间戳时,我更喜欢将其转换为秒,并完全跳过整个日期时间的处理。 - Anton vBR
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接