问题
I have data that looks like this:
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
I want to sum or take the max value of time per user based on the flag. So I converted the column to timedelta.
sample.loc[:,'Time'] = pd.to_timedelta(sample['Time'])
However, when I try to test this by summing the entire column
sum(sample['Time'])
I get the following error:
TypeError: unsupported operand type(s) for +: 'int' and 'Timedelta'
What am I missing here? I thought you could sum with Timedelta.
回答1:
Python's sum
, by default, assumes you are summing integers. Hence it tries to start summing from 0
, which is where this error comes from. It's impossible to add 0
to a timedelta.
This can be fixed in 2 ways:
Provide a different starting value to
sum
, perhaps an "empty"timedelta
, as the second argument for sum:from datetime import timedelta ... sum(sample['Time'], timedelta())
Use Series.sum (which will probably have better performance anyway):
sample['Time'].sum()
回答2:
In order to take the sum of the number of days that you received using pd.to_timedelta(), you need to do the following:
sum(sample.Time.astype('int'))/8.64e+13
That is, you need to convert the 'Time' column integer to perform the sum() operation. 8.64e+13 is to convert the ns to days.
来源:https://stackoverflow.com/questions/60804162/typeerror-using-timedelta-cannot-sum-times