python - 组合具有不同数据类型的列以在 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 对象的属性进行修改。更改原始值。
是否有捷径可寻?
解决方案
使用pandas.to_timedelta
和pandas.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')
推荐阅读
- sql - 休息后重置 ROW_NUMBER()
- sql - 如果内部联接查询不存在,则 SQLite 选择查询
- python - 能够使用 POSTMAN 访问端点,但不能使用 PYTHON
- r - R网格包:如何创建具有多种颜色的textGrob并将其定位在视口的中心
- php - 如何使用 perl 下载 txt 网页内容
- swift - 将标准输入传递给进程(例如,启用 sudo)
- java - 当我使用 If 条件循环遍历 ArrayList 时,显示搜索到的项目之前的项目
- pandas - 熊猫数据框操作枢轴/分组/重塑
- aws-lambda - 开发运营:AWS Lambda .zip 与 Terraform
- .net-core - EFCore 多对多关系与末端的同一张表