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

为何自定义函数中调用pandas.Series.between会报‘str无between属性’错误?

问题原因及解决思路

问题原因

  • 直接调用df["icd10"].between(...)时,df["icd10"]是pandas Series对象,between是Series的内置方法,因此能正常执行。
  • 使用df.apply(classify_death, axis=1)时,传入函数的row是DataFrame的单行数据(Series类型),但row["icd10"]是单个字符串值,字符串对象没有between方法,所以抛出AttributeError。
  • 额外注意:报错代码里写的是row["dmcaacme"],和你定义的icd10列名不一致,这大概率是笔误导致的额外问题。

解决思路

方案1:优先使用向量式操作(推荐)

pandas的核心优势是向量式运算,效率远高于逐行apply,直接保留你最初的写法即可:

df["copd"] = df["icd10"].between("j40", "j4799").astype(int)

方案2:如果必须用apply(复杂场景)

如果有更复杂的逐行逻辑需要封装,直接用字符串比较替代between(ICD-10编码的字符串排序规则符合区间判断需求):

def classify_death(row):
    # 注意修正列名,确保和实际数据列一致
    copd = 1 if "c00" <= row["icd10"] <= "c9799" else 0
    return copd

df["copd"] = df.apply(classify_death, axis=1)

方案3:改用numpy.where(简洁向量式替代)

也可以用numpy.where实现条件赋值,效果和between完全一致:

import numpy as np
df["copd"] = np.where(df["icd10"].between("j40", "j4799"), 1, 0)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 10:05:33