Pandas计算日期周数报错'str' object has no attribute 'isocalendar'如何解决
问题修复方案
错误原因
你遇到的AttributeError: 'str' object has no attribute 'isocalendar'报错根因是:当前Date列的数据类型为object,实际存储的是字符串格式的日期,isocalendar是Python datetime类型、Pandas datetime64类型才支持的方法,调用前需要先完成日期格式转换。
推荐解决方案(矢量化操作,性能更高)
不需要用apply,直接用Pandas内置的矢量化方法处理,大体积数据集下效率远高于逐行apply:
- 先把
Date列转换为Pandas datetime类型
df["Date"] = pd.to_datetime(df["Date"])
- 直接通过dt访问器提取ISO年度周数
df["date_week"] = df["Date"].dt.isocalendar().week
兼容原有apply写法的解决方案
如果你希望保留原有的apply写法,需要在lambda函数内先把字符串转为datetime对象:
- 先导入datetime模块
from datetime import datetime
- 调整apply逻辑,先解析日期再提取周数
df["date_week"] = df["Date"].apply(lambda x: datetime.strptime(x, "%Y-%m-%d").isocalendar()[1])
注意事项
- 上述方法提取的是ISO标准周数,规则为每年第一个包含周四的周为第1周,如果你的业务场景需要适配其他周数规则,可以自行调整
strftime参数,比如用df["Date"].dt.strftime("%U")提取周日为一周第一天的周数,%W提取周一为一周第一天的周数。 - 转换日期时如果遇到格式不匹配的报错,可以给
pd.to_datetime或者strptime指定对应日期格式参数,提升解析效率和准确率。
内容的提问来源于stack exchange,提问作者vojtam
相关产品推荐
相关产品推荐

