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

Pandas apply lambda提取join_date月份触发类型错误问题求助

错误原因

join_date列虽然pandas返回的dtype为object,但列中实际存储的是Python原生datetime.date类型对象,并非字符串,无法直接使用切片语法[:7]截取内容,触发了TypeError: 'datetime.date' object is not subscriptable报错。

解决方案

方法1:转字符串后矢量化截取(推荐,性能更高)

直接将整列转为字符串后用pandas的str属性切片,无需用apply遍历:

emp['join_mth'] = emp['join_date'].astype(str).str[:7]

方法2:通过日期属性拼接年月

如果后续需要对该字段做日期运算,可直接通过datetime.date的自带属性拼接成指定格式的年月字符串:

emp['join_mth'] = emp['join_date'].apply(lambda x: f"{x.year}-{x.month:02d}")

方法3:转为pandas datetime类型后批量处理

先将该列转为pandas内置的datetime64类型,后续所有日期操作都更便捷:

# 先转格式
emp['join_date'] = pd.to_datetime(emp['join_date'])
# 提取年月,返回Period类型,若需要字符串可再加.astype(str)
emp['join_mth'] = emp['join_date'].dt.to_period('M')

补充说明:pandas的object dtype支持存储任意Python对象,不能仅凭dtype显示为object就判断列内元素是字符串类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 19:54:05