pandas根据另一列整数月份修改datetime列报TypeError如何解决
报错原因
Python 原生 datetime 对象的 replace() 方法仅支持接收单个整数类型的参数,而你传入的 df_final["Month"] 是 pandas Series 序列对象,无法被直接转换为单个整数,因此触发类型错误。
解决方案
方案1:矢量化构造日期(性能最优,适合大数据量)
直接使用 pandas 原生的矢量化日期构造方法,无需逐行遍历,执行效率更高:
# 提取当前日期的固定年、日 cur_year = current_day.year cur_day = current_day.day # 按行拼接生成新日期 df_final["Date"] = pd.to_datetime({ "year": cur_year, "month": df_final["Month"], "day": cur_day })
如果存在月份不合法、或对应月份没有当日(例如当前日为31、替换为2月)的场景,可以添加errors="coerce"参数,将无效日期自动转为空值NaT:
df_final["Date"] = pd.to_datetime({ "year": cur_year, "month": df_final["Month"], "day": cur_day }, errors="coerce")
方案2:逐行调用replace(适合小数据量,写法简洁)
如果数据量较小,可以通过apply逐行读取月份值传入replace方法:
df_final["Date"] = df_final["Month"].apply(lambda month: current_day.replace(month=month))
内容的提问来源于stack exchange,提问作者S V
相关产品推荐
相关产品推荐

