Разница во времени в столбцах данных - PullRequest
0 голосов
/ 14 мая 2018

После ответа здесь и и здесь . Сначала я изменяю фрейм данных на объект времени

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

data['end'] = pd.to_datetime(data['end'], format = '%H:%M:%S').dt.time
data['minutes'] = (data['end'] - data['start']).dt.minutes
data['Hour'] = data['start'].dt.hour

Я получаю эту ошибку:

Error:TypeError: unsupported operand type(s) for -: 'datetime.time' and 'datetime.time'

Я проверил, что такое информация о фрейме данных:

data.info()
    start    10000 non-null object
    end      10000 non-null object

Столбец по-прежнему является типом объекта. Почему он не конвертируется в datetime64? Почему я не могу получить к нему доступ с помощью средства доступа dt ?

Моя последняя попытка была:

data['start'] = pd.to_datetime(data_session['start'], format = '%H:%M:%S')
data['end'] = pd.to_datetime(data['end'], format = '%H:%M:%S')
data['minutes'] = (data['end'] - data['start'])

data.info()
    start    10000 non-null datetime64[ns]
    end      10000 non-null datetime64[ns]

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

e.g: 06:10:10 -> 1900-01-01 06:10:10

Мои цели:

  • Создать новую колонку, указав только час одной из серий
  • Создать новый столбец с разницей во времени в минутах

Ответы [ 2 ]

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

Это один из способов использования operator.attrgetter.Данные от @ jezrael.

from operator import attrgetter

for col in ['start', 'end']:
    data[col] = pd.to_timedelta(data[col])

data['minutes'] = (data['end'] - data['start']).apply(attrgetter('seconds')) / 60
data['hour'] = (data['start'].apply(attrgetter('seconds')) / 60**2).astype(int)

print(data)

       end    start  minutes  hour
0 12:01:04 10:01:04    120.0    10
1 15:21:00 05:41:00    580.0     5
0 голосов
/ 14 мая 2018

Я думаю, нужно преобразовать to_timedelta с, а затем преобразовать в минуты и часы:

data = pd.DataFrame({'end':['12:01:04','15:21:00'],
                     'start':['10:01:04','5:41:00']})

data['start'] = pd.to_timedelta(data['start'])
data['end'] = pd.to_timedelta(data['end'])

data['minutes'] = (data['end'] - data['start']).dt.total_seconds() / 60
data['Hour'] = data['start'].astype('timedelta64[h]').astype(int)
print (data)
       end    start  minutes  Hour
0 12:01:04 10:01:04      120    10
1 15:21:00 05:41:00      580     5
...