如何将数据框中的多个列组合为Pandas日期时间格式

时间:2018-04-08 14:21:38

标签: python-3.x pandas

我有一个pandas数据框,其值如下

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 我想知道有没有什么方法可以合并Date,Month& Year& amp;时间为pd.datetime格式?

2 个答案:

答案 0 :(得分:2)

to_datetime与自动转换列Day,Month,Year一起使用并添加time转换to_timedelta

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

另一个解决方案是首先将所有列加入string

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)
   ProcessID1 UserID  Date  Month  Year      Time            Datetime
0         248   Tony    29      4  2017  23:30:56 2017-04-29 23:30:56
1         436   Jeff    28      4  2017  20:02:19 2017-04-28 20:02:19
2         500   Greg     4      5  2017  11:48:29 2017-05-04 11:48:29

最后如果需要删除这些列:

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

答案 1 :(得分:0)

import pandas as pd

您也可以使用 apply() 方法执行此操作:-

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

最后使用 pandas to_datetime() 方法将 'Datetime' 转换为 datetime dtype:-

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

df 的输出:

    ProcessID1  UserID   Date   Month   Year    Time        Datetime
0   248          Tony     29    4       2017    23:30:56    2017-04-29 23:30:56
1   436          Jeff     28    4       2017    20:02:19    2017-04-28 20:02:19
2   500          Greg      4    5       2017    11:48:29    2017-05-04 11:48:29

现在如果您要删除'日期''月''年''时间' 列然后使用:-

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