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

DataFrame日期转换报'str' object has no attribute 'shape'错误求助

问题原因

你遇到的AttributeError: 'str' object has no attribute 'shape'错误,核心原因是test列中存在非字符串类型的异常元素(比如空值NaN、数值类型的年月值),在自定义apply逻辑中尝试对非str类型做切片操作触发报错。Spyder环境运行正常一般是因为对应测试数据集无异常值,或者两个环境的pandas版本、数据加载逻辑存在差异,导致test列的实际元素类型不一致。

最优修复方案

不需要手动切片拼接,pandas的to_datetime原生支持解析YYYYMM格式的年月值,会自动补全为当月第一天,性能远高于自定义apply逻辑:

# 一步完成转换,自动补当月1号
df['test'] = pd.to_datetime(df['test'], format='%Y%m', errors='coerce')

参数说明:

  • format='%Y%m':明确指定输入格式是4位年份+2位月份,大幅提升解析效率
  • errors='coerce':遇到无法解析的异常值时自动转为空值NaT,避免代码直接报错,你也可以根据需求改成errors='ignore'保留原值

手动拼接的兼容写法

如果有特殊场景需要自己拼接字符串,可以用pandas原生的矢量化字符串方法,避免apply遍历的性能问题和类型异常:

# 先统一转字符串,再切片拼接,最后转日期
df['test'] = pd.to_datetime(
    df['test'].astype(str).str[:4] + '-' + df['test'].astype(str).str[-2:] + '-01',
    format='%Y-%m-%d',
    errors='coerce'
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 03:15:04