我有一个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
格式?
答案 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'])