Oliver Wright
Oliver Wright

Reputation: 55

Convert numpy array full of time deltas to hours

I have a numpy array full of timedeltas I want to be able to convert them to hours.

print(times_arr)

array([datetime.timedelta(seconds=28800),
       datetime.timedelta(seconds=30600),
       datetime.timedelta(seconds=23400),
       datetime.timedelta(seconds=27000),
       datetime.timedelta(seconds=23400),
       datetime.timedelta(seconds=23400),
       datetime.timedelta(seconds=30600),
       datetime.timedelta(seconds=23400),
       datetime.timedelta(seconds=27000),
       datetime.timedelta(seconds=23400),
       datetime.timedelta(seconds=30600),
       datetime.timedelta(seconds=27000),
       datetime.timedelta(seconds=23400),
       datetime.timedelta(seconds=23400),
       datetime.timedelta(seconds=30600),
       datetime.timedelta(seconds=28800),
       datetime.timedelta(seconds=23400)])

Does anyone know how I can convert this array to hours so array[(8, 8.56 etc..

I have tried everything I know how. I am new to python. Thanks

Upvotes: 3

Views: 1902

Answers (4)

Ken T
Ken T

Reputation: 2553

Use arr.astype('timedelta64[s]').astype("int64")/3600 instead of arr.astype('timedelta64[m]').astype(int) / 60 which will cause "loss" of seconds.

Upvotes: 1

Shehan Ishanka
Shehan Ishanka

Reputation: 593

Try this.

from datetime import datetime,timedelta
print(datetime.strptime(str(timedelta(seconds=30600)),'%H:%M:%S').strftime('%H.%M'))

08.30

Upvotes: 0

mdx97
mdx97

Reputation: 77

You can divide the total seconds in each timedelta by 3600 to get your desired output.

new = np.array([delta.total_seconds() / 3600 for delta in times_array])

Upvotes: 0

cs95
cs95

Reputation: 402493

Convert to timedelta64[m] dtype, then go from there:

arr.astype('timedelta64[m]').astype(int) / 60
# array([8. , 8.5, 6.5, 7.5, 6.5, 6.5, 8.5, 6.5, 7.5, 6.5, 8.5, 7.5, 6.5,
#        6.5, 8.5, 8. , 6.5])

Upvotes: 2

Related Questions