2015-04-20 2 views
0

Я хочу преобразовать столбец в свой фрейм данных со значением типа '12: 51 AM 'в' 01 '(что равно 24-часовому часовому времени '01: 00'). И да, я хочу округлить его до ближайшего часа.Преобразование даты и времени Python

Например, говорят, что мой DataFrame является:

Time 
12:51 AM 
1:51 AM 
2:03 AM 
4:23 PM 

Я хочу изменить его на:

Time 
01 
02 
02 
16 

Мой метод:

Во-первых, разделить каждую строку, скажем, '12: 51 AM ', на две части - «12: 51» и «AM». Затем используйте цикл и если это необходимо.

Я ищу более эффективные способы, такие как использование пакета datetime.

Большое спасибо.

ответ

1

time.strptime() подходит под ваши нужды.

from time import strptime 

def transform(data_frame): 
    time = strptime(data_frame, "%I:%M %p") 
    hour = time.tm_hour 
    if time.tm_min >= 30: 
     if hour < 23: 
      hour += 1 
     else: 
      hour = 0 
    return hour 

values = "12:51 AM", "1:51 AM", "2:03 AM", "4:23 PM" 

for value in values: 
    print(transform(value)) 

Выход:

1 
2 
2 
16 

Надеется, что это помогает!

+0

Спасибо! Помогает ! – Chianti5

0

Я согласен с cdonts. Вот вещий решение

from time import strptime as st 

times = "12:51 AM", "1:51 AM", "2:03 AM", "4:23 PM" 
for time in times: 
    print(st(time, '%I:%M %p').tm_hour+st(time, '%I:%M %p').tm_min//30) 

В зависимости от ваших потребностей вы можете сохранить результаты в виде списка (или тип данных по вашему выбору)

times = [st(time, '%I:%M %p').tm_hour+st(time, '%I:%M %p').tm_min//30 for time in("12:51 AM", "1:51 AM", "2:03 AM", "4:23 PM")] 

Не ясно, где вы будете вытягивать ваши раз из. Если они не являются входами пользователей и хранятся где-то для последующего поиска вы можете написать функцию, которая извлекает значения и возвращают список, который затем может быть использован как так

times = [st(time, '%I:%M %p').tm_hour+st(time, '%I:%M %p').tm_min//30 for time in retrieve(args)] 

Надеется, что это помогает

1

Там в ничего плохого в существующих ответах, но они не используют ни одно из встроенных решений pandas, которые могут облегчить ситуацию. Если вы начинаете с вещей в строчном формате, вы можете конвертировать в datetime, а затем использовать pandas dt для извлечения часов и т. Д.

df['Time2'] = pd.to_datetime(df.Time) 

     Time    Time2 
0 12:51 AM 2015-04-20 00:51:00 
1 1:51 AM 2015-04-20 01:51:00 
2 2:03 AM 2015-04-20 02:03:00 
3 4:23 PM 2015-04-20 16:23:00 

Теперь вы можете извлечь часы/минуты/и т. Д. очень легко с dt методов.

df['Time2'].dt.hour + df['Time2'].dt.minute.div(30).astype(int) 

0  1 
1  2 
2  2 
3 16 

Полезные документы:

dt accessor

converting to timestamps

+0

О, хорошо, спасибо @EdChum. Это тоже легко, я добавлю это, чтобы ответить. – JohnE

Смежные вопросы