How to convert a datetime format to minutes - pandas

16,161

Solution 1

Use total_seconds or seconds and divide by 60, last cast to integers:

#if necessary converting to timedelta
#df['usage_duration'] = pd.to_timedelta(df['usage_duration'])

df['new'] = df['usage_duration'].dt.total_seconds().div(60).astype(int)

Or:

 df['new'] = (df['usage_duration'].dt.seconds.div(60).astype(int) 
             + df['usage_duration'].dt.days.multiply(1440).astype(int) )

print (df)
   processid userid  usage_duration   new
0      17613   root 0 days 23:41:03  1421
1      17641   root 2 days 04:05:26  3125
2      13848    acs 0 days 00:00:50     0
3       3912    acs 0 days 06:07:38   367
4       6156    acs 0 days 17:22:43  1042

Solution 2

This is one way:

s = pd.Series(['0 days 23:41:03.000000000', '2 days 04:05:26.000000000',
               '0 days 00:00:50.000000000', '0 days 06:07:38.000000000',
               '0 days 17:22:43.000000000'])

s = pd.to_timedelta(s).astype('timedelta64[m]').astype(int)

print(s)

0    1421
1    3125
2       0
3     367
4    1042
dtype: int32
Share:
16,161
Jithesh Erancheri
Author by

Jithesh Erancheri

Updated on July 22, 2022

Comments

  • Jithesh Erancheri
    Jithesh Erancheri almost 2 years

    I have a data frame which has a column usage_duration (which is the difference of two another columns in datetime format). It looks like below:

    processid, userid, usage_duration 
    17613,root,0 days 23:41:03.000000000
    17641,root,2 days 04:05:26.000000000
    13848,acs,0 days 00:00:50.000000000
    3912,acs,0 days 06:07:38.000000000
    6156,acs,0 days 17:22:43.000000000
    

    Now I wanted to convert the same into minutes. It should look like as below:

    processid, userid, usage_duration_min
    17613,root,1421
    17641,root,3125
    13848,acs,0
    3912,acs,367
    6156,acs,1042
    

    Can someone let me know how is it possible?

    Highly appreciate your support

  • Jithesh Erancheri
    Jithesh Erancheri about 6 years
    This suggestion works, but the 2 days are not converting. For example in the second row, it is only converting 04:05:26
  • Jithesh Erancheri
    Jithesh Erancheri about 6 years
    df['new'] = df['usage_duration'].dt.seconds.div(60).astype(int)+df['usag‌​e_duration'].dt.days‌​.multiply(1440).asty‌​pe(int)
  • jezrael
    jezrael about 6 years
    @JitheshErancheri - Thank you, I change answer.