Priya C
Priya C

Reputation: 63

Remove the decimal value in min and sec in pandas

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

Answers (1)

Chris Adams
Chris Adams

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

Related Questions