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

使用Pandas合并多格式含空值日期列为单列时报TypeError如何解决

报错原因

  • 触发报错的根本原因是:Datetime类型的Pandas数组/列不支持加法运算,日期从逻辑上不存在相加的概念,你写的df['date1'] + df['date2'] + df['date3']属于语法误用,和列本身是不是datetime类型无关。
  • 你原本的思路是每行仅有一种格式匹配成功、其余列都是空值NaT,想把非空值合并为一列,这个逻辑没问题,但+号不能实现空值合并的需求。

优化实现方案

不用额外生成3列中间变量,直接用链式fillna按优先级填充空值即可,代码更简洁、执行效率更高,完整可运行代码如下:

import pandas as pd
import datetime

data = [['Apr 2021'], ['Jan 1'], ['Fri'], ['Jan 18']] 
df = pd.DataFrame(data, columns = ['date'])

# 计算本周五日期
today = datetime.date.today()
friday = today + datetime.timedelta((4 - today.weekday()) % 7)
this_friday = friday.strftime('%Y-%m-%d')

# 按格式优先级依次转换,后序结果自动填充前序的空值
df['dateFinal'] = pd.to_datetime('2021 ' + df['date'], errors='coerce', format='%Y %b %d')\
                    .fillna(pd.to_datetime(df['date'], errors='coerce'))\
                    .fillna(df['date'].map({'Fri': this_friday}))

# 若需要输出YYYY-MM-DD格式的字符串,保留下面这行;需要保留datetime类型则删掉即可
df['dateFinal'] = df['dateFinal'].dt.strftime('%Y-%m-%d')

如果后续要新增其他格式的匹配规则,只需要在链式调用的末尾追加对应的.fillna(新格式转换结果)即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 21:36:02