【问题标题】:Time difference of time string (only want the calculate the difference of the minutes then convert to seconds)时间字符串的时差(只需要计算分钟的差异然后转换为秒)
【发布时间】:2019-08-11 17:30:23
【问题描述】:

我有 2 次开始和结束时间 (lasttime),格式为 (HH:MM:SS)。我需要找到分钟之间的时间差(以秒为单位)

【问题讨论】:

标签: python pandas datetime


【解决方案1】:

在您的字符串列上,请使用下面的代码

from datetime import timedelta
df['diffT']=(pd.to_datetime(df['StartTime_str'], format='%H:%M:%S')-pd.to_datetime(df['LastTime_str'], format='%H:%M:%S'))//timedelta(seconds=1)

【讨论】:

  • 你能解释一下我为什么要使用 timedelta 吗?目前您的代码并不能完全满足我的需要,这只是分钟(以秒为单位)之间的差异,谢谢
  • datetime 对象不能直接相互减去,因此需要 timedelta。对我来说,当我使用您的数据时,我可以完美地在几分钟内获得差异。使用(pd.to_datetime(df['StartTime_str'], format='%H:%M:%S'),我们将列转换为日期时间对象,然后对其进行减法操作。
  • 感谢您解释这是我可以解决的方法是索引 2 处的 StartTime(例如 00:07:05)和索引 3 处的 LastTime(00:02:05)等的差异并继续解决这个问题,同时沿着这样的列走下去? UDP_interval['diffT']=(pd.to_datetime(UDP_interval.iloc[[2 ,0 ] , : ], format='%H:%M:%S')-pd.to_datetime(UDP_interval.iloc[[1 ,0 ] , : ], format='%H:%M:%S'))//timedelta(minutes=60)
  • 试试这个,看看这是不是你想要的df['diffT']=(pd.to_datetime(df['LastTime'].shift(-1), format='%H:%M:%S')-pd.to_datetime(df['StartTime'], format='%H:%M:%S'))//timedelta(seconds=1) 与以前相比唯一的变化是shift(-1)。你可以修改 shift 里面的值来得到你想要的结果
【解决方案2】:

数据:

StartTime,LastTime
00:02:05,00:03:05
00:02:05,00:05:05
00:07:05,00:10:05
00:07:05,00:15:05
00:12:06,00:30:06
00:12:06,00:35:06

创建DataFrame:

来自剪贴板:

df = pd.read_clipboard(sep=',')

来自 csv:

df = pd.read_csv('UDP_interval.csv', delim_whitespace=True, usecols=['StartTime','LastTime'])

df:

df.info():

<class 'pandas.core.frame.DataFrame'>
Int64Index: 6 entries, 0 to 5
Data columns (total 2 columns):
StartTime    6 non-null object
LastTime     6 non-null object
dtypes: object(2)
memory usage: 144.0+ bytes

功能:

def seconds_between(x):
    time_format = "%H:%M:%S"
    t1 = datetime.strptime(x[0], time_format)
    t2 = datetime.strptime(x[1], time_format)
    return abs((t2 - t1).seconds)

应用函数:

df['Diff_sec'] = df.apply(seconds_between, axis=1)

决赛:

【讨论】:

  • 这类似于我的方法,我知道这适用于您的数据,但不适用于我的数据...我只是收到错误 dtype: object' does not match format '%H:%M: %S' 和 ValueError: 时间数据 '0
  • 我的数据帧来自一个 csv 文件,这就是为什么我使用 UDP_interval = pd.read_csv('UDP_interval.csv', delim_whitespace=True, usecols=['StartTime','LastTime']) 并分开通过空格。所以我不确定我为什么要使用 df = pd.read_clipboard(sep=',')
  • @Tina 你不知道,那只是为了在我的解决方案顶部读取数据
猜你喜欢
  • 2021-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多