我有一些时间数据,我需要使用
转换为正确的日期时间data['dep_time'] = pd.to_datetime(data['dep_time'], format='%H:%M').dt.time
问题出在每个单元格中,我的数字位数不一致
我可能有' 1714'或' 714'或者只是' 6'。
我想使用格式将每个str更改为00:00的格式,但是我必须从str的后面开始并假设如果我只有' 6'这意味着' 06'
year month day dep_time dep_delay arr_time arr_delay cancelled \
103992 2014 5 11 1013 -2 1247 -13 0
103993 2014 5 11 1929 -1 2215 -24 0
103994 2014 5 11 1117 5 1355 9 0
103995 2014 5 11 736 -10 924 -18 0
103996 2014 5 11 1340 0 1647 10 0
答案 0 :(得分:5)
尝试使用str.pad
df=pd.DataFrame({'time':['1', '12', '123', '1234']})
df.time.str.pad(4,side='left',fillchar='0')
Out[188]:
0 0001
1 0012
2 0123
3 1234
Name: time, dtype: object
或rjust
df.time.str.rjust(4,fillchar='0')
Out[190]:
0 0001
1 0012
2 0123
3 1234
Name: time, dtype: object
更新
pd.to_datetime(df.time.str.pad(4,side='left',fillchar='0'),format='%H%M').dt.time
Out[199]:
0 00:01:00
1 00:12:00
2 01:23:00
3 12:34:00
Name: time, dtype: object
答案 1 :(得分:4)
在普通Python中,您可以使用right justification:
for s in ('1', '12', '123', '1234'):
print(s.rjust(4, '0'))
<强>输出强>
0001
0012
0123
1234
答案 2 :(得分:2)
不像一些建议那么优雅,但很简单,可能适合你?
dt = 'dep_time'.zfill(4)
dt = dt[:2] + ":" + dt[2:]
所以1你会得到
00:01
和613:
06:13
或更简洁:
dt = '{0}:{1}'.format(date_time.zfill(4)[:2], date_time.zfill(4)[2:])
答案 3 :(得分:2)
借用温的pandas.Series.str.zfill
df.time.str.zfill(4)
0 0001
1 0012
2 0123
3 1234
Name: time, dtype: object
[f'{int(i):04d}' for i in df.time]
['0001', '0012', '0123', '1234']
<a id="am-accessible-userName" href="javascript:void(0);" class="selected">
Name
<span class="util accessible-text">, sort Z to A</span>
<span class="jpui iconwrap sortIcon" id="undefined" tabindex="-1">
<span class="util accessible-text" id="accessible-"></span>
<i class="jpui angleup util print-hide icon" id="icon-undefined" aria-hidden="true"></i>
</span>
</a>