Ошибка типа, использующая timedelta, не может суммировать времена - PullRequest
1 голос
/ 22 марта 2020

У меня есть данные, которые выглядят так:

    user                in               out location  flag     Time
0    ron  12/21/2021 10:11  12/21/2016 17:50     home     0  4:19:03
1    ron  12/21/2016 13:26  12/21/2016 13:52   office     2  0:25:28
2  april   12/21/2016 8:12  12/21/2016 17:27   office     0  8:15:03
3  april  12/21/2016 18:54  12/21/2016 22:56   office     0  4:02:36
4   andy   12/21/2016 8:57  12/21/2016 12:15     home     0  2:59:40

Я хочу суммировать или взять максимальное значение времени для пользователя на основе флага. Поэтому я преобразовал столбец в timedelta.

sample.loc[:,'Time'] = pd.to_timedelta(sample['Time'])

Однако, когда я пытаюсь проверить это путем суммирования всего столбца

sum(sample['Time'])

, я получаю следующую ошибку:

TypeError: unsupported operand type(s) for +: 'int' and 'Timedelta'

Чего мне не хватает Вот? Я думал, что вы могли бы подвести итог с Timedelta.

Ответы [ 2 ]

3 голосов
/ 22 марта 2020

Python sum по умолчанию предполагает, что вы суммируете целые числа. Следовательно, он пытается начать суммирование с 0, откуда и происходит эта ошибка. Невозможно добавить 0 к временной шкале.

Это можно исправить двумя способами:

  • Укажите другое начальное значение для sum, возможно, " пусто "timedelta, как второй аргумент для sum:

    from datetime import timedelta
    ...
    sum(sample['Time'], timedelta())
    
  • Использовать Series.sum (что, вероятно, в любом случае лучше работать):

    sample['Time'].sum()
    
0 голосов
/ 23 марта 2020

Чтобы взять сумму количества дней, которые вы получили с помощью pd.to_timedelta (), вам нужно сделать следующее:

sum(sample.Time.astype('int'))/8.64e+13

То есть вам нужно преобразовать 'Время 'столбец целое число для выполнения операции sum (). 8.64e + 13 - преобразование нс в дни.

...