Skip to content Skip to sidebar Skip to footer

How To Combine Multiple Columns In A Data Frame To Pandas Datetime Format

I have a pandas data frame with values as below ProcessID1 UserID Date Month Year Time 248 Tony 29 4 2017 23:30:56 436 Jeff 28

Solution 1:

Use to_datetime with automatic convert column Day,Month,Year with add times converted to_timedelta:

df['Datetime'] = pd.to_datetime(df.rename(columns={'Date':'Day'})[['Day','Month','Year']]) + \
                 pd.to_timedelta(df['Time'])

Another solutions are join all column converted to strings first:

df['Datetime'] = pd.to_datetime(df[['Date','Month','Year', 'Time']]
                   .astype(str).apply(' '.join, 1), format='%d %m %Y %H:%M:%S')
df['Datetime']  = (pd.to_datetime(df['Year'].astype(str) + '-' +
                                  df['Month'].astype(str) + '-' +
                                  df['Date'].astype(str) + ' ' +
                                  df['Time']))

print(df)ProcessID1UserIDDateMonthYearTimeDatetime0248Tony2942017  23:30:562017-04-29 23:30:561436Jeff2842017  20:02:192017-04-28 20:02:192500Greg452017  11:48:292017-05-04 11:48:29

Last if need remove these columns:

df = df.drop(['Date','Month','Year', 'Time'], axis=1)
print (df)
   ProcessID1 UserID            Datetime
0         248   Tony 2017-04-29 23:30:56
1         436   Jeff 2017-04-28 20:02:19
2         500   Greg 2017-05-04 11:48:29

Solution 2:

import pandas as pd

You can also do this by using apply() method:-

df['Datetime']=df[['Year','Month','Date']].astype(str).apply('-'.join,1)+' '+df['Time']

Finally convert 'Datetime' to datetime dtype by using pandasto_datetime() method:-

df['Datetime']=pd.to_datetime(df['Datetime'])

Output of df:

ProcessID1UserIDDateMonthYearTimeDatetime0248Tony2942017    23:30:562017-04-29 23:30:561436Jeff2842017    20:02:192017-04-28 20:02:192500Greg452017    11:48:292017-05-04 11:48:29

Now if you want to remove 'Date','Month','Year' and 'Time' column then use:-

df=df.drop(columns=['Date','Month','Year', 'Time'])

Solution 3:

Concatenate the columns together to a string format and use pd.to_datetime to convert to datetime.

import pandas as pd
import io

txt = """
ProcessID1  UserID   Date   Month    Year     Time 
        248    Tony     29       4   2017  23:30:56
        436    Jeff     28       4   2017  20:02:19
        500    Greg      4       5   2017  11:48:29
"""

df = pd.read_csv(io.StringIO(txt), sep="[\t ,]+")

df['Datetime'] =  pd.to_datetime(df['Date'].astype(str) \
                                 + '-' + df['Month'].astype(str) \
                                 + '-' + df['Year'].astype(str) \
                                 + ' ' + df['Time'], 
                                 format='%d-%m-%Y %H:%M:%S')
df

Post a Comment for "How To Combine Multiple Columns In A Data Frame To Pandas Datetime Format"