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

Pandas对int类型列按行条件取后5位调用apply报int不可下标错误如何解决

报错原因

  • 你对df['Code']这个单列Series调用apply时,遍历的对象是每个int类型的元素,而非整行数据,因此代码中row['Code']的写法错误,单个int值无法按下标取值,直接触发你遇到的TypeError
  • 单个Python基础类型(int/str等)没有astype方法,该方法是Pandas对象专属的类型转换接口
  • 直接对int值调用len()也会报错,需要先转为字符串再计算长度

解决方案

方案1:修正后的apply写法

如果要坚持用apply逻辑,修正后代码如下:

df['Code5'] = df['Code'].apply(lambda x: int(str(x)[-5:]) if len(str(x)) > 5 else x)

如果需要保留截取后的前导零(比如602000截取后要保留为02000而非2000),可以去掉int()转换,代码改为:

df['Code5'] = df['Code'].apply(lambda x: str(x)[-5:])

方案2:更高效的向量化写法(推荐)

Python的字符串切片特性天然支持长度不足时取全部内容,无需额外判断长度,直接用Pandas的向量化操作即可,性能远高于apply,代码更简洁:

# 结果为int类型,自动去掉前导零
df['Code5'] = df['Code'].astype(str).str[-5:].astype(int)

# 结果为字符串类型,保留前导零和固定5位长度
# df['Code5'] = df['Code'].astype(str).str[-5:]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 10:09:03