当一列是datetime而另一列是对象时,如何在Pandas中连接/合并两列?

时间:2018-05-17 21:53:53

标签: python pandas dataframe

我在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。感谢。

3 个答案:

答案 0 :(得分:4)

pd.to_datetimedt.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

如果您不再需要,可以删除DateTime

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]