2015-11-17 2 views
1

я следующие данные в двух столбцах, которые я хочу объединить в одну колонку панд:Регистрация даты/времени из двух столбцов в dataframe в одном

0 2015-08-01 00:00-8:00 

Формата Я хотел бы, чтобы это было сформулировано в является:

0 2015-08-01T09:00:00-08:00 

я мог бы иметь время неправильно на формат я хотел бы его, но я попробовал несколько конверсий to_datetime не повезло.

Спасибо! Chris

+0

- это исходные строки колонок? – Gabriel

+0

и что именно вы хотите? новый столбец данных? если да, то как вы интерпретируете столбец 00: 00-8: 00 и 09: 00: 00-08: 00? какие единицы? – Gabriel

+0

0 2015-08-01T09: 00: 00-08: 00 извлекается из некоторого примера кода Google python для обновления календаря Google. У меня такое ощущение, что последние 4 цифры - это часы и минуты. – cmagorian

ответ

1

Крис,

самый простой способ будет объединить каждую ячейку с формулой конкатенации следующим образом:

new = cell1 + " " + cell2 + " " + cell3 

, но если вы хотите сохранить целостность даты и, возможно, сделать несколько простых вычислений ... вот мой метод выбора для решения этой проблемы.

Во-первых, я хотел бы уточнить, что ваша дата - это промежуток времени, но мы можем делать с ним забавные вещи. я издевался своими данными для простоты ссылки (это только для отображения - на самом деле не матрица)

ваших данных выглядят следующим образом

a b    c  
0 2015-08-01 00:00-8:00 
0 2015-09-03 6:00-17:00 

уведомление здесь, что часовые диапазоны не имеют надежная длина, это может быть не так с вашими данными, но вот решение, которое будет работать независимо.

def combineTime(b,c): 
    from datetime import datetime 
    dashNum = c.find("-") 
    start = (b + " " + c[:dashNum]) 
    finish = (b + " " + c[dashNum+1:]) 
    startDate = datetime.strptime(start, "%Y-%m-%d %H:%M") 
    finishDate = datetime.strptime(finish, "%Y-%m-%d %H:%M") 
    return startDate 

это, при запуске, возвращает следующее

>>> combineTime(b,c) 
datetime.datetime(2015, 8, 1, 0, 0) 

вы могли бы так же легко поменять местами вернуться startDat для возвращения finishDate как так

def combineTime(b,c): 
    from datetime import datetime 
    dashNum = c.find("-") 
    start = (b + " " + c[:dashNum]) 
    finish = (b + " " + c[dashNum+1:]) 
    startDate = datetime.strptime(start, "%Y-%m-%d %H:%M") 
    finishDate = datetime.strptime(finish, "%Y-%m-%d %H:%M") 
    return finishDate 

который возвращает

>>> combineTime(b,c) 
datetime.datetime(2015, 8, 1, 8, 0) 

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

def elapseTime(b,c): 
    from datetime import datetime 
    dashNum = c.find("-") 
    start = (b + " " + c[:dashNum]) 
    finish = (b + " " + c[dashNum+1:]) 
    startDate = datetime.strptime(start, "%Y-%m-%d %H:%M") 
    finishDate = datetime.strptime(finish, "%Y-%m-%d %H:%M") 
    timeDiff = finishDate - startDate 
    elapHour = timeDiff.total_seconds()/3600 
    return round(elapHour, 2) 

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

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