You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas中替换Timestamp的时分?报错求助

解决Pandas修改Datetime列时分秒的报错问题

嘿,我懂你遇到的这个坑!你用replace()的时候犯了个常见的小错误——Pandas里单个Datetime对象的replace()只能接受单个标量值(比如整数20),但你传入的是整列数据(data['t_hour']是Series对象),所以才会抛出TypeError: replace() got an unexpected keyword argument 'hour'这个错误。

下面给你三种可行的解决方案,按需挑选:

方法1:用apply()逐行处理(简单直观)

这种方法适合小数据集,逻辑清晰,容易理解:

import pandas as pd

# 构造示例数据
data = pd.DataFrame({
    'some_time': ['2020-09-01 19:00:58.0000', '2020-10-31 14:44:00.0000'],
    't_hour': [20, 17],
    't_min': [0, 45]
})
# 先将some_time转为datetime类型(如果还没转的话)
data['some_time'] = pd.to_datetime(data['some_time'])

# 生成target_time列
data['target_time'] = data.apply(
    lambda row: row['some_time'].replace(
        hour=row['t_hour'], minute=row['t_min'], second=0
    ),
    axis=1
)

运行后就能得到你想要的结果:

some_timet_hourt_mintarget_time
02020-09-01 19:00:582002020-09-01 20:00:00
12020-10-31 14:44:0017452020-10-31 17:45:00

方法2:拼接日期字符串再转datetime(灵活可控)

如果你习惯用字符串操作,可以提取原时间的日期部分,再和t_hour、t_min组合成新的时间字符串:

data['target_time'] = pd.to_datetime(
    # 提取原时间的日期部分转为字符串
    data['some_time'].dt.date.astype(str) + ' ' +
    # 小时补零确保两位格式
    data['t_hour'].astype(str).str.zfill(2) + ':' +
    # 分钟补零确保两位格式
    data['t_min'].astype(str).str.zfill(2) + ':00'
)

这里的str.zfill(2)很关键,能避免出现2020-09-01 9:5:00这种格式错误的时间,保证小时和分钟都是两位数字。

方法3:向量化操作(高效适配大数据集)

如果你的数据集很大,apply()逐行处理会比较慢,推荐用向量化的时间运算:

# 提取原时间的日期部分(去掉时分秒)
date_part = data['some_time'].dt.floor('D')
# 将t_hour和t_min转为时间差对象
time_delta = pd.to_timedelta(
    data['t_hour'].astype(str) + ':' + data['t_min'].astype(str) + ':00'
)
# 日期加时间差得到目标时间
data['target_time'] = date_part + time_delta

这种方法完全是向量化操作,速度比apply()快数倍,处理百万级数据也能轻松应对。

内容的提问来源于stack exchange,提问作者rkraft

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 19:27:44