使用pandas替换TimeStamp的hour和minute时触发TypeError报错
问题解决:pd.to_datetime后调用replace报错TypeError: replace() got an unexpected keyword argument 'hour'
错误原因
核心问题是调用对象的类型不匹配:
- 当
df_end_date是pandas Series(哪怕仅包含单个值),pd.to_datetime()返回的是DatetimeSeries,而非单个Timestamp对象。 - Series自带的
replace()方法用于替换元素值,参数是to_replace、value等,并不支持hour、minute这类时间属性参数,因此触发报错。
解决方案
根据df_end_date的类型,选择对应方法:
情况1:df_end_date是单个标量值(如字符串、单个日期)
直接转换为Timestamp后调用replace()即可:
end = pd.to_datetime(df_end_date, dayfirst=True).replace(hour=23, minute=59)
情况2:df_end_date是pandas Series(含单个或多个日期值)
使用dt访问器调用Timestamp的replace()方法,对Series中每个datetime元素批量处理:
end = pd.to_datetime(df_end_date, dayfirst=True).dt.replace(hour=23, minute=59)
替代方案:通过时间偏移实现
无需调用replace(),直接给日期加上对应时长的时间差,同样能得到23:59:00的结果:
end = pd.to_datetime(df_end_date, dayfirst=True) + pd.Timedelta(hours=23, minutes=59)
内容的提问来源于stack exchange,提问作者Dattel Klauber
相关产品推荐
相关产品推荐

