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

Pandas如何实现整数列类似str.contains的列表值筛选?

问题原因
  • 直接报错的核心原因:pandas的.str访问器仅支持字符串类型的Series对象调用,你的ID列存储的是整数类型值,直接调用该访问器必然触发AttributeError。
  • 底层逻辑选型错误:str.contains的作用是做字符串子串模糊匹配,根本不适配「判断值是否属于给定整数列表」的精确匹配场景。

注意:不要为了套用str.contains强行把整数ID列转为字符串类型,该方案不仅存在不必要的类型转换性能损耗,还会因为子串匹配逻辑出现误判——比如ID为151的员工会被误匹配到bonus列表中的1513,导致筛选结果错误。

解决方案

针对整数类型列的列表成员判断,直接用pandas内置的isin()方法即可,该方法底层做了C级优化,哪怕待匹配的ID列表规模很大,运行效率也很高,完全满足筛选需求。
完整可运行代码如下:

# 待发放奖金的员工ID列表
bonus = [1513, 5454, 6545, 3425, 32424, 2341, 3424, 4568, 4812]

# 构造双条件筛选规则:ID在奖金列表内 + 薪资小于5000
filter_mask = df["ID"].isin(bonus) & (df["SALARY"] < 5000)

# 提取符合条件的数据,仅保留ID、SALARY两列
bonus_employees = df.loc[filter_mask, ["ID", "SALARY"]]
性能优化提示

如果实际业务中待匹配的bonus列表规模达到万级/十万级以上,可以先把列表转为集合类型再传入isin(),能进一步压缩判断耗时,写法调整为:

filter_mask = df["ID"].isin(set(bonus)) & (df["SALARY"] < 5000)

运行后得到的输出格式和预期完全一致,示例如下:

ID  SALARY
0  1513    2933
1  3424    2500
2  3425    1542
3  2341    3600

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 07:57:26