我是Python的新手,如果这是一个简单的解决方案,请道歉。
我目前有一列时间当前存储为字符串,在查看我的数据帧时如下所示:
break-inside: avoid
所以9.0等于00:09,1620到16:20。 (这是一个包含更多字段的相当大的数据集,因此我创建了该示例以轻松显示其显示的格式)
每次我尝试将其转换为时间时,它也会形成一个日期,并将部分时间合并到日期中,从而产生不准确的输出。任何帮助将不胜感激。
答案 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
。但我们假设它还可以包含int
和str
格式的数据。
我们还假设您的数据框定义如下
>>>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))