【问题标题】:pd._to_datetime() convert time onlypd.to_datetime() 仅转换时间
【发布时间】:2018-02-23 08:02:37
【问题描述】:

有没有办法使用pd.to_datetime()H:M:S 中的字符串转换为仅时间?

当我使用pd.to_datetime() 时,它给了我01/01/1900 09:08:20

随后,我想计算deltaT = endTime - beginTime。我可以只减去时间元素吗?

【问题讨论】:

  • 您可以使用pandas.Series.dt.time 属性来获取时间。 pd.to_datetime(df, format='%H:%M:%S').dt.time 像这样。你可以减去列来找到时间增量。或者做类似this answer的事情。您可以在示例输入和预期输出中编辑您的问题吗?

标签: python pandas datetime


【解决方案1】:

我认为不会。

但是您可以将两列都转换为日期时间,然后获得差异。日期是一些所以只有时间的差异。最后,您可以通过secondstotal_seconds 将差异转换为秒,如果可能的话time1 < time2

df['diff'] = (pd.to_datetime(df['time1']) - 
              pd.to_datetime(df['time2']))

示例:

df = pd.DataFrame({'time1':['09:08:20','09:20:20','19:08:20'],
                   'time2':['09:07:20','09:20:20','19:08:10']})

print (df)
      time1     time2
0  09:08:20  09:07:20
1  09:20:20  09:20:20
2  19:08:20  19:08:10

df['diff'] = abs(pd.to_datetime(df['time1']) - 
              pd.to_datetime(df['time2'])).dt.seconds

print (df)

      time1     time2  diff
0  09:08:20  09:07:20    60
1  09:20:20  09:20:20     0
2  19:08:20  19:08:10    10

【讨论】:

  • 是的,我还认为您需要包含完整的 daettime 来处理时间。 +1在这种情况下不需要指定格式。
  • @AntonvBR - 谢谢。只是一件事,OP昨天更改this question,我认为您可以编辑答案;)
  • @AntonvBR - 谢谢,我对其进行了测试,它对正时间增量的工作非常好。但是对于负时间增量,total_seconds 似乎更好。
  • @AntonvBR - 这取决于数据,所以我认为现在的解决方案还可以;)
  • 之前添加了 abs()。所以对我来说很慢,我要去吃午饭了。我会尽快查看链接的问题。
【解决方案2】:

您应该使用datetime 模块,首先使用strptime() 剥离您的时间,然后使用strftime() 重建它:

import datetime
time = "2017-10-16T08:27:16+0000"
stripedTime = datetime.datetime.strptime(time, '%Y-%m-%dT%I:%M:%S%z')

newTime = stripedTime.strftime('%H:%M:%S')
print(newTime)

【讨论】:

    猜你喜欢
    • 2014-12-24
    • 2021-03-10
    • 1970-01-01
    • 2017-12-03
    • 1970-01-01
    • 2018-10-28
    • 1970-01-01
    • 2019-07-14
    • 2015-10-30
    相关资源
    最近更新 更多