将奇数时间格式转换为小时

时间:2018-04-19 00:10:50

标签: python r date datetime

enter image description here

您好,重新格式化日期的最简单方法是“2017-01-01T19:33:28 + 0000”

例如,该日期表示2017年1月1日下午7:33:28。

我对删除月,日和年感兴趣,仅保留小时和分钟。

在我正在查看的数据中,用户的软件命令在同一天,超过2小时(晚上7点到9点)进行。 (见图)

我想重新格式化时间,以便在这两个小时内轻松分析命令分配。

对Python或r的建议?也许是为了制作时间间隔?

更新我想使用下面发布的解决方案

  

来自datetime import datetime

     

x = datetime.strptime('2017-01-01T19:33:28 + 0000',   '%Y-%间 - %的dT%H:%M:%S%Z')\               .strftime( '%H:%M')

但是我只能对列中的一个值执行此操作。如何将它应用于整个列中的所有值?

Column values to convert

谢谢!

6 个答案:

答案 0 :(得分:2)

您可以使用dateutil

import dateutil
t = dateutil.parse("2017-01-01T19:33:28+0000")
t.hour # prints 19
t.minute # prints 33

您可以决定以后的小时和分钟来做什么。

编辑:顺便说一句,这是在python中。

答案 1 :(得分:1)

在R中,lubridate包有很多选项(doc)。

library(lubridate)
t <- as_datetime("2017-01-01T19:33:28+0000")
hour(t)
#[1] 19
minute(t)
#[1] 33

您可能对interval功能特别感兴趣。

答案 2 :(得分:0)

这是一个使用datetime的Python解决方案,它属于标准库:

from datetime import datetime

x = datetime.strptime('2017-01-01T19:33:28+0000', '%Y-%m-%dT%H:%M:%S%z')\
            .strftime('%H:%M')

# '19:33'

答案 3 :(得分:0)

不像dateutil那样功能丰富,但已向量化:numpy

>>> import numpy as np
>>> 
>>> example
['2018-01-01T12:00:00+0000', '2018-01-01T16:37:45+0000', '2018-01-01T21:15:30+0000', '2018-01-02T01:53:15+0000', '2018-01-02T06:31:00+0000', '2018-01-02T11:08:45+0000']
>>>
# create numpy array, 'M8' stands for datetime64
>>> A = np.array(example, dtype='M8')
>>> A
array(['2018-01-01T12:00:00', '2018-01-01T16:37:45',
       '2018-01-01T21:15:30', '2018-01-02T01:53:15',
       '2018-01-02T06:31:00', '2018-01-02T11:08:45'],
      dtype='datetime64[s]')
>>> 
# we have to manually extract hours and minutes but it is easy:
# convert to units 'h' (hour, discarding minutes and seconds) and 
# 'D' (day, also discarding smaller units) and take the difference
>>> hours = A.astype('M8[h]') - A.astype('M8[D]')
# and similar for minutes
>>> minutes = A.astype('M8[m]') - A.astype('M8[h]')
>>> hours
array([12, 16, 21,  1,  6, 11], dtype='timedelta64[h]')
>>> minutes
array([ 0, 37, 15, 53, 31,  8], dtype='timedelta64[m]')

答案 4 :(得分:0)

这是另一种润滑剂溶液(对于R):

library(lubridate)
t<-ymd_hms("2017-01-01T19:33:28+0000")
hour(t)
#[1] 19
minute(t)
#[1] 33

答案 5 :(得分:0)

R中的无添加包方法是:

as.POSIXct( "2017-01-01T19:33:28+0000", format="%Y-%m-%dT%H:%M:%S%z", tz="UTC" )
[1] "2017-01-01 19:33:28 UTC"