Search code examples
pandasdatetimetype-conversionrow

Convert rows into datetimes Python


This is my dataframe:

          Parametres           Valeurs            Valeurs.1            Valeurs.2
0         Nombre de reboot     0                    0                    0
1         mode privé           1                    1                    1
2         mode public          0                    0                    0
3         Date de roulage      2019-01-05           2019-01-05            2019-01-05
4         Heures de roulage    00:07:07             00:01:01             00:03:03
5         Temps de trajet      00:05:05             00:00:00             00:01:01
6         première connex      00:01:01             00:01:01             00:01:01
7         Nombre de decon      0                    0                    1
8         Durée total          00:00:00             00:00:00             00:02:02

I need to convert the 4th, the 5th, the 6th, and the 8th row from string to datetimes (%H:%M:%S) then calculate the sum.

Is it possible? because during my search I only found how to convert columns into datetimes.


Solution

  • I believe you need seelct columns ant set to datetimes:

    df1 = df.iloc[[3,4,5,8], 1:].apply(pd.to_datetime)
    print (df1)
                  Valeurs           Valeurs.1           Valeurs.2
    3 2019-01-05 00:00:00 2019-01-05 00:00:00 2019-01-05 00:00:00
    4 2019-11-26 00:07:07 2019-11-26 00:01:01 2019-11-26 00:03:03
    5 2019-11-26 00:05:05 2019-11-26 00:00:00 2019-11-26 00:01:01
    8 2019-11-26 00:00:00 2019-11-26 00:00:00 2019-11-26 00:02:02
    

    But better should be convert one row to datetime and another to timedeltas:

    df2 = df.iloc[[3], 1:].apply(pd.to_datetime)
    print (df2)
         Valeurs  Valeurs.1  Valeurs.2
    3 2019-01-05 2019-01-05 2019-01-05
    
    df3 = df.iloc[[4,5,8], 1:].apply(pd.to_timedelta)
    print (df3)
       Valeurs Valeurs.1 Valeurs.2
    4 00:07:07  00:01:01  00:03:03
    5 00:05:05  00:00:00  00:01:01
    8 00:00:00  00:00:00  00:02:02
    

    Better solution is possible is reshape for same types of data per column:

    df4 = df.set_index('Parametres').T
    df4['Date de roulage'] = pd.to_datetime(df4['Date de roulage'])
    cols1 = ['Heures de roulage','Temps de trajet','premiere connex','Duree total']
    df4[cols1] = df4[cols1].apply(pd.to_timedelta)
    
    cols2 = df4.columns.difference(cols1 + ['Date de roulage'])
    df4[cols2] = df4[cols2].astype(int)
    print (df4)
    Parametres  Nombre de reboot  mode prive  mode public Date de roulage  \
    Valeurs                    0           1            0      2019-01-05   
    Valeurs.1                  0           1            0      2019-01-05   
    Valeurs.2                  0           1            0      2019-01-05   
    
    Parametres Heures de roulage Temps de trajet premiere connex  Nombre de decon  \
    Valeurs             00:07:07        00:05:05        00:01:01                0   
    Valeurs.1           00:01:01        00:00:00        00:01:01                0   
    Valeurs.2           00:03:03        00:01:01        00:01:01                1   
    
    Parametres Duree total  
    Valeurs       00:00:00  
    Valeurs.1     00:00:00  
    Valeurs.2     00:02:02  
    
    print (df4.dtypes)
    Nombre de reboot               int32
    mode prive                     int32
    mode public                    int32
    Date de roulage       datetime64[ns]
    Heures de roulage    timedelta64[ns]
    Temps de trajet      timedelta64[ns]
    premiere connex      timedelta64[ns]
    Nombre de decon                int32
    Duree total          timedelta64[ns]
    dtype: object