我在Pandas中有以下数据框:
Date Time
0 2017-01-01 00:00
1 2017-01-01 01:00
2 2017-01-01 02:00
3 2017-01-01 03:00
4 2017-01-01 04:00
我想将Time列(type:object)连接到Date列(type:datetime)(稍后将其名称更改为Datetime)。 Datetime列中的值应如下所示:
2017-01-01 00:00
连接/合并这些列的最佳方法是什么?生成的列类型应为datetime。感谢。
答案 0 :(得分:4)
将pd.to_datetime
与dt.strftime
df['datetime']=pd.to_datetime(df.Date+df.Time,format='%Y-%m-%d%H:%M').dt.strftime('%Y-%m-%d %H:%M')
df
Out[879]:
Date Time datetime
0 2017-01-01 00:00 2017-01-01 00:00
1 2017-01-01 01:00 2017-01-01 01:00
2 2017-01-01 02:00 2017-01-01 02:00
3 2017-01-01 03:00 2017-01-01 03:00
4 2017-01-01 04:00 2017-01-01 04:00
答案 1 :(得分:1)
您可以将Date
更改为字符串,将其与时间连接,然后转换为datetime:
df['Date'] = df['Date'].astype(str)
df['datetime'] = pd.to_datetime(df.Date+' '+df.Time)
>>> df
Date Time datetime
0 2017-01-01 00:00 2017-01-01 00:00:00
1 2017-01-01 01:00 2017-01-01 01:00:00
2 2017-01-01 02:00 2017-01-01 02:00:00
3 2017-01-01 03:00 2017-01-01 03:00:00
4 2017-01-01 04:00 2017-01-01 04:00:00
如果您不再需要,可以删除Date
和Time
列
df.drop(['Date', 'Time'], axis=1, inplace=True)
答案 2 :(得分:1)
这可能有点粗糙,但您可以将它们组合成一个字符串,然后使用pd.to_datetime()
再次将它们设为日期:
In [1]: date = pd.to_datetime(pd.Series(['2017-01-01']*5))
In [2]: time = ["0{}:00".format(i) for i in range(5)]
In [3]: df = pd.DataFrame({'date': date, 'time': time})
In [4]: df
Out[4]:
date time
0 2017-01-01 00:00
1 2017-01-01 01:00
2 2017-01-01 02:00
3 2017-01-01 03:00
4 2017-01-01 04:00
In [5]: pd.to_datetime((df.date.astype(str) + " " + df.time))
Out[5]:
0 2017-01-01 00:00:00
1 2017-01-01 01:00:00
2 2017-01-01 02:00:00
3 2017-01-01 03:00:00
4 2017-01-01 04:00:00
dtype: datetime64[ns]