首页 > 解决方案 > 组合具有不同数据类型的列以在 pandas 数据框中创建单个 dateTime 列

问题描述

我已经从某个数据源导入了数据,这些数据类型为“对象”,日期为“对象”,小时为整数,如下所示:

Date           Hour    Val
2019-01-01  1   0
2019-01-01  2   0
2019-01-01  3   0
2019-01-01  4   0
2019-01-01  5   0
2019-01-01  6   0
2019-01-01  7   0
2019-01-01  8   0

我需要一个具有日期时间的列,如下所示:

DATETIME
2019-01-01 01:00:00
2019-01-01 02:00:00
2019-01-01 03:00:00
2019-01-01 04:00:00
2019-01-01 05:00:00
2019-01-01 06:00:00
2019-01-01 07:00:00
2019-01-01 08:00:00

我尝试使用将日期列转换为 dateTime 格式

pd.datetime(df.Date)

然后使用

df.Date.dt.hour = df.Hour

我得到错误

ValueError:不支持对 datetimelike 对象的属性进行修改。更改原始值。

是否有捷径可寻?

标签: pythonpandasdatetime

解决方案


使用pandas.to_timedeltapandas.to_datetime

# if needed
df['Date'] = pd.to_datetime(df['Date'])

df['Datetime'] = df['Date'] + pd.to_timedelta(df['Hour'], unit='H')

[出去]

        Date  Hour  Val            Datetime
0 2019-01-01     1    0 2019-01-01 01:00:00
1 2019-01-01     2    0 2019-01-01 02:00:00
2 2019-01-01     3    0 2019-01-01 03:00:00
3 2019-01-01     4    0 2019-01-01 04:00:00
4 2019-01-01     5    0 2019-01-01 05:00:00
5 2019-01-01     6    0 2019-01-01 06:00:00
6 2019-01-01     7    0 2019-01-01 07:00:00
7 2019-01-01     8    0 2019-01-01 08:00:00

由于您要求使用组合列并使用单个pd.to_datetime调用的方法,因此您可以执行以下操作:

df['Datetime'] = pd.to_datetime((df['Date'].astype(str) + ' ' +
                                 df['Hour'].astype(str)),
                                 format='%Y-%m-%d %I')

推荐阅读