在Python中将字符串转换为HH:MM时间

时间:2017-11-03 13:53:12

标签: python pandas datetime

我是Python的新手,如果这是一个简单的解决方案,请道歉。

我目前有一列时间当前存储为字符串,在查看我的数据帧时如下所示:

break-inside: avoid

所以9.0等于00:09,1620到16:20。 (这是一个包含更多字段的相当大的数据集,因此我创建了该示例以轻松显示其显示的格式)

每次我尝试将其转换为时间时,它也会形成一个日期,并将部分时间合并到日期中,从而产生不准确的输出。任何帮助将不胜感激。

5 个答案:

答案 0 :(得分:1)

我认为你需要timedelta s:

#remove NaNs rows in time column if necessary
#df = df.dropna(subset=['time'])
#or replace NaNs to 0
#df['time1'] = df['time1'].fillna(0)

#convert to int, then str and add 0 
s = df['time'].astype(int).astype(str).str.zfill(4)
#add : twice
df['time1'] = s.str[:2] + ':' + s.str[2:] + ':00'
#convert to timedeltas
df['time2'] = pd.to_timedelta(df['time1'])
print (df)
  bus_no    time     time1    time2
0   Bus1     2.0  00:02:00 00:02:00
1   Bus2   840.0  08:40:00 08:40:00
2   Bus3  2340.0  23:40:00 23:40:00
3   Bus4    15.0  00:15:00 00:15:00
4   Bus5  1205.0  12:05:00 12:05:00
5   Bus6  1304.0  13:04:00 13:04:00
6   Bus7  1620.0  16:20:00 16:20:00
7   Bus8     9.0  00:09:00 00:09:00

答案 1 :(得分:0)

首先,为了使您的字符串更加一致,您可以使用str.zfill(x)使它们具有相同的长度。例如:

"9.0".zfill(6)

会给你“0009.0”。然后,您可以执行类似

的操作
df.time.apply(lambda x: x[0:2] + ":" + x[2:4])

将其转换为“HH:MM”格式。

答案 2 :(得分:0)

使用:

def get_time(s):
    s = s.replace('.0','')
    time_type = len(s)
    if len(s) == 1:
        return '00:0%s'%s
    elif len(s) == 2:
        return '00:%s'%s
    elif len(s) == 3:
        return '0%s:%s'%(s[0:1], s[1:3])
    elif len(s) == 4:
        return '%s:%s'%(s[0:2], s[2:4])

答案 3 :(得分:0)

这实际上取决于您所追求的内容以及time列中数据的格式。

从您提供的示例中,您的time列似乎只包含float。但我们假设它还可以包含intstr格式的数据。

我们还假设您的数据框定义如下

>>>df.head()

    time
0      2
1 1620.0
2    155
3    120
4  123.0

然后,您可以先使用以下命令将time列转换为字符串

df.time = df.time.astype(str).astype(float).astype(int).astype(str)

现在包含格式为int的字符串的时间。然后你可以通过

添加前导零
df.time = df.time.str.zfill(4)

>>>df.head()

    time
0   0002
1   1620
2   0155
3   0120
4   0123

然后,您可以使用apply来映射time_string列,就像这样

df['time_string'] = df.time.apply(lambda x: x[0:2] + ":" + x[2:4])

或者首先将其转换为datetime,然后从该对象中提取日期字符串。这对你来说可能是一个不必要的步骤 - 但我喜欢在Python中将时间对象作为datetime

df['time_datetime'] = df.time.apply(lambda x: datetime.strptime(x,'%H%M'))
df['time_string'] = df.time_datetime.apply(lambda x: x.strftime("%H:%M"))

>>>df.head()

   time       time_datetime             time_string
0  0002       1900-01-01 00:02:00       00:02
1  1620       1900-01-01 16:20:00       16:20
2  0155       1900-01-01 01:55:00       01:55
3  0120       1900-01-01 01:20:00       01:20
4  0123       1900-01-01 01:23:00       01:23

答案 4 :(得分:0)

想要将“ 1:27 PM”转换为24小时格式的Thouse

from datetime import datetime
def twelve_to_twentyfour(t):
"""
input: t '1:27 PM'
output '13:27'
"""
in_time = datetime.strptime(t, "%I:%M %p")
out_time = datetime.strftime(in_time, "%H:%M")
return out_time

df['time'].apply(lambda x: twelve_to_twentyfour(x))