Панды — Добавьте секунды из столбца в дату и время в другом столбце

#python #pandas #dataframe

Вопрос:

У меня есть фрейм данных с двумя столбцами, ["StartDate" ,"duration"] элементы в StartDate столбце- datetime тип, а элементы duration -ints.

Что-то вроде:

 StartDate  Duration
08:16:05    20  
07:16:01    20
 

Я ожидаю, что получу:

 EndDate 
08:16:25
07:16:21
 

Просто добавьте секунды к часу.

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

Комментарии:

1. Пожалуйста, добавьте некоторые примеры данных и ожидаемые результаты к этому вопросу

Ответ №1:

рассмотрим этот df

     StartDate   duration
0   01/01/2017  135
1   01/02/2017  235
 

Вы можете получить столбец даты и времени следующим образом

 df['EndDate'] = pd.to_datetime(df['StartDate'])   pd.to_timedelta(df['duration'], unit='s')
df.drop('StartDate,'duration', axis = 1, inplace = True)
 

Вы получаете

     EndDate             
0   2017-01-01 00:02:15 
1   2017-01-02 00:03:55 
 

ИЗМЕНИТЬ: с помощью образца кадра данных, который вы опубликовали

 df['EndDate'] = pd.to_timedelta(df['StartDate'])   pd.to_timedelta(df['Duration'], unit='s')
 

Комментарии:

1. Привет. Я получаю эту ошибку, когда пытаюсь сделать это «ошибка типа: тип данных «дата-время» не понято» проблема в том, что я пытаюсь добавить временные интервалы.

2. Да, я пытаюсь использовать timedelta вместо datetime.

3. Если я выполняю pd.to_timedelta(df[‘Дата начала’]) или pd.to_timedelta(df[‘Продолжительность’], единица измерения= «s») отдельно, я не получаю ошибок, но когда я пытаюсь их добавить, это приводит к ошибке этого типа.

4. По — видимому, проблема уже решена и может быть решена путем обновления pandas. Какую версию вы используете? Я использую «0.19.2», и решение отлично работает для меня.

Ответ №2:

 df.StartDate = df.apply(lambda x: pd.to_datetime(x.StartDate) pd.Timedelta(Second(df.duration)) ,axis = 1)
 

Комментарии:

1. Что это Second ?