Reputation: 63
I have a dataframe as
dict1={'time' : ['2 min 19 sec','2 min 43 sec','1 min 33 sec','32 sec','40 sec','22 sec','2.3
sec','3.2 min 13 sec','4.9 min 7.6 sec']}
df=pd.DataFrame(dict1)
df
time
0 2 min 19 sec
1 2 min 43 sec
2 1 min 33 sec
3 32 sec
4 40 sec
5 22 sec
6 2.3 sec
7 3.2 min 13 sec
8 4.9 min 7.6 sec
I need to produce the output as follows, such that the decimal values for min should be added to sec and decimal value for sec to be removed
time
0 2 min 19 sec
1 2 min 43 sec
2 1 min 33 sec
3 0 min 32 sec
4 0 min 40 sec
5 0 min 22 sec
6 0 min 2 sec
7 3 min 15 sec
8 4 min 16 sec
Upvotes: 2
Views: 54
Reputation: 18647
Try using Series.str.extract
with a regex pattern to extract the numerical values.
Add the decimal part of mins to secs, then use list comprehension to format the desired result:
vals = df['time'].str.extract('^(?:(\S+?) min )?(\S+?) sec').fillna(0).astype(float)
vals[1] += vals[0].mod(1).mul(10)
df['time_corrected'] = [f'{int(m)} min {int(s)} sec' for m, s in vals.apply(tuple, axis=1)]
[out]
time time_corrected
0 2 min 19 sec 2 min 19 sec
1 2 min 43 sec 2 min 43 sec
2 1 min 33 sec 1 min 33 sec
3 32 sec 0 min 32 sec
4 40 sec 0 min 40 sec
5 22 sec 0 min 22 sec
6 2.3 sec 0 min 2 sec
7 3.2 min 13 sec 3 min 15 sec
8 4.9 min 7.6 sec 4 min 16 sec
Upvotes: 1