You need to enable JavaScript to run this app. Pandas:如何提取DataFrame中列值匹配数字列表的行
优惠活动
大模型
产品
解决方案
定价
更多

Pandas:如何提取DataFrame中列值匹配数字列表的行

基础筛选写法回顾

筛选DataFrame中列A取值为1的行时,大家基本都会用熟悉的等值判断写法:

df.loc[df['A'] == 1]
常见误区

碰到需要匹配多值的场景——比如要找出列A取值在[1,2,3]范围内的所有行时,不少人会惯性把原来写法里的单值直接替换成列表,写出下面的代码:

# 完全无法正常运行的错误写法
df.loc[df['A'] == [1,2,3]]

这种写法一执行就会抛数组长度不匹配的报错,根本拿不到预期的筛选结果。
原因很直白:单值筛选时,df['A'] == 1 是拿A列的每个元素和标量1做等值判断,最终生成的布尔掩码长度和DataFrame总行数完全一致,刚好能给loc做筛选用。但如果把右侧的标量换成长度为3的列表,Pandas会默认走逐元素向量对比的逻辑——左边A列的长度等于DataFrame总行数,右边列表长度只有3,两边维度对不上,根本没法完成计算。

正确实现方案

针对“列值匹配给定列表内任意值”的筛选需求,Pandas专门提供了isin()方法,写法和原来的单值筛选逻辑非常接近,上手零成本:

# 筛选列A取值在[1,2,3]范围内的所有行
df.loc[df['A'].isin([1, 2, 3])]

实用提示:如果硬要沿用逐次等值判断的写法,就得把每个值的判断用逻辑或运算符|拼接起来,但这种写法非常冗余,匹配的列表越长代码越难维护,还很容易因为漏写括号触发语法错误,远不如isin()简洁高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.02 22:54:04