Формат времени ул с нарезкой - PullRequest
0 голосов
/ 03 мая 2018

У меня есть данные времени, которые мне нужно преобразовать в правильное время с

data['dep_time'] = pd.to_datetime(data['dep_time'], format='%H:%M').dt.time

Проблема в каждой ячейке, у меня непоследовательное количество цифр

У меня может быть «1714» или «714» или просто «6».

Я хочу использовать формат для изменения каждой строки на формат 00:00, но я должен начать с задней части строки и предположить, что если у меня просто «6», это означает «00: 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   

Ответы [ 4 ]

0 голосов
/ 03 мая 2018

Заимствование Вена df

pandas.Series.str.zfill

df.time.str.zfill(4)

0    0001
1    0012
2    0123
3    1234
Name: time, dtype: object

Python 3.6 f-string

[f'{int(i):04d}' for i in df.time]

['0001', '0012', '0123', '1234']
0 голосов
/ 03 мая 2018

Попробуйте использовать 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
0 голосов
/ 03 мая 2018

Не так элегантно, как некоторые предложения, но просто и может работать для вас?

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:])
0 голосов
/ 03 мая 2018

В простом Python вы можете использовать правильное выравнивание :

for s in ('1', '12', '123', '1234'):
    print(s.rjust(4, '0'))

выход

0001
0012
0123
1234
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...