Reputation: 55
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
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
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
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
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