Невозможно вычесть два столбца времени - PullRequest
0 голосов
/ 05 мая 2019

У меня есть следующий набор данных: https://i.imgur.com/Ufk7Tvz.jpg

Я хочу создать новый столбец, который будет вычитанием между time_exit и time_entry.Тем не менее, когда я пытаюсь код:

df[['tempo']] = df['time_exit'] - df['time_entry']

Результат: TypeError: неподдерживаемые типы операндов для -: 'str' и 'str'

Если я это сделаю:

df[['tempo']] = df[['time_exit']] - df[['time_entry']]

Результат: ValueError: Столбцы должны иметь ту же длину, что и ключ.

Но, выполняя описание для обоих, они имеют ЖЕ число, то есть 381185.

Я потерян.

Ответы [ 3 ]

1 голос
/ 05 мая 2019

Глядя на первую ошибку, ваши столбцы имеют неправильный тип данных; Вы пытаетесь вычесть строку из другой. Итак, вам следует преобразовать эти столбцы:

df['time_exit'] = pd.to_datetime(df['time_exit'])
df['time_entry'] = pd.to_datetime(df['time_entry'])

тогда

df['tempo'] = df['time_exit'] - df['time_entry']

должен сделать свое дело.

Ваш второй подход терпит неудачу, потому что df[['time_exit']] и df[['time_entry']] возвращают DataFrames, а не Series.

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

0 голосов
/ 05 мая 2019

Я бы рекомендовал сначала указать формат данных текущего времени,

df['time_exit'] = pd.to_datetime(df['time_exit'] , errors='coerce', format='%d/%m/%Y %H:%M:%S', infer_datetime_format=True)
df['time_entry'] = pd.to_datetime(df['time_entry'] , errors='coerce', format='%d/%m/%Y %H:%M:%S', infer_datetime_format=True)

, а затем:

df[['tempo']] = df['time_exit'] - df['time_entry']

Если вам нужен только подсчет разницы дней:

df[['tempo']] = (df['time_exit'] - df['time_entry']).dt.days
0 голосов
/ 05 мая 2019

Используйте apply с Timedelta:

#sample data
df = pd.DataFrame({'start': ['07:15:00', '08:00:00'], 'end':['08:15:00', '10:00:00']})

# apply with pd.Timedelta
df['diff'] = df['end'].apply(pd.Timedelta) - df['start'].apply(pd.Timedelta) 

      start       end     diff
0  07:15:00  08:15:00 01:00:00
1  08:00:00  10:00:00 02:00:00
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...