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

为什么pandas的pd.to_datetime转换字符串日期后类型仍为object且无法调用dt属性

原因分析

pd.to_datetime默认errors='ignore',只要列中存在任意一行无法解析的日期格式,方法会直接放弃整列转换,返回原始object类型的列,不会抛出明确报错,所以你会看到转换后类型依然是object,后续调用.dt访问器自然触发属性错误。

排查方法

先定位无法解析的异常日期行:

# 将解析失败的内容转为NaT空值
temp_date = pd.to_datetime(eq['Date'], errors='coerce')
# 输出所有解析失败的原始日期内容
print(eq[temp_date.isna()]['Date'])

通常异常原因包括:

  • 列内日期格式不统一,比如部分是年-月-日,部分是月/日/年
  • 部分行带多余字符、特殊符号、隐藏空格
  • 存在超出合法范围的日期值(比如2月30日)
解决方案

1. 强制转换

根据排查到的格式选择对应参数:

  • 如果确认日期格式统一,直接指定format参数提升解析成功率:
# 示例为月/日/年格式,可根据实际情况调整格式符
eq['Date'] = pd.to_datetime(eq['Date'], errors='coerce', format='%m/%d/%Y')
  • 如果格式不统一,开启自动推断:
eq['Date'] = pd.to_datetime(eq['Date'], errors='coerce', infer_datetime_format=True)

2. 处理异常值

转换后会将解析失败的行置为NaT空值,按需处理即可:

  • 少量异常行直接删除:
eq = eq.dropna(subset=['Date'])
  • 重要数据可以手动修正异常日期字符串后重新转换。

3. 验证结果

转换完成后查看类型确认生效:

print(eq['Date'].dtype)
# 正常输出为 datetime64[ns] 即可正常使用.dt访问器
print(eq['Date'].dt.year)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 04:18:03