【问题标题】:Create new column with time difference (Pandas dataframe)创建具有时差的新列(Pandas 数据框)
【发布时间】:2020-07-09 03:51:49
【问题描述】:

我在 csv 数据集中有列 start_time 和 end_time,时间格式为 HH:MM(数据类型是字符串类型,因为它来自 csv)。我想使用 panadas(或任何实际的东西)来获取两列之间的时间增量,并将其放入一个名为 diff_minutes 的新列中。为此,我尝试了以下方法,

dataset['diff_minutes'] = dataset['end_time'] - dataset['start_time']
dataset['diff_minutes']= dataset['diff_minutes']/np.timedelta64(1,'m')

但我收到以下错误,ValueError: hour must be in 0..23。我检查了我的数据集(它很大),结果发现我有几个小时超过 23 小时。例如,开始时间:25:58,结束时间:29:20。是否有另一种方法可以获取大于 23 的值的时间增量?

这是示例数据:

import pandas as pd
from io import StringIO
s = '''\
start_time,end_time
25:58,29:20
25:30,25:30
02:07,03:11
'''
df = pd.read_csv(StringIO(s))

看起来像:

  start_time end_time
0      25:58    29:20
1      25:30    25:30
2      02:07    03:11

期望的输出

| start_time | end_time | diff_minutes
______________________________________
| 25:58      | 29:20    | 202
| 25:30      | 25:30    | 0
| 02:07      | 03:11    | 64

【问题讨论】:

标签: python pandas datetime time


【解决方案1】:

您可以通过to_timedelta 将列转换为时间增量,如有必要也可以转换为字符串:

dataset['diff_minutes'] = (pd.to_timedelta(dataset['end_time'].astype(str) + ':00') -
                           pd.to_timedelta(dataset['start_time'].astype(str) + ':00' ))
dataset['diff_minutes']= dataset['diff_minutes']/np.timedelta64(1,'m')
print (dataset)
  start_time end_time  diff_minutes
0      25:58    29:20         202.0
1      25:30    25:30           0.0
2      02:07    03:11          64.0

【讨论】:

  • 非常感谢。特别是对于一个响应如此之快以至于堆栈不会让我将其标记为正确的 3 分钟 lmao。
猜你喜欢
  • 2020-02-22
  • 1970-01-01
  • 1970-01-01
  • 2017-04-21
  • 2017-05-06
  • 2018-12-03
  • 1970-01-01
  • 2020-10-25
  • 1970-01-01
相关资源
最近更新 更多