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

Pandas .query API无法按预期工作,如何实现等效行过滤?

使用Pandas .query() API复现布尔索引过滤逻辑

当然可以用.query()实现相同的过滤逻辑,你之前的写法出错是因为在.query()中不能直接用Python的in运算符检查Series元素的子串,必须用Pandas的.str.contains()方法来处理字符串匹配。

正确的.query()代码

import pandas as pd

data = {
    'roll_Call': [32041, 60164, 164989, 179741, 231414],
    'name': ['Cozy Kim', 'Sam Juday', 'Jessica M', 'Ajay Kim Jong', 'Kim Jong'],
    'std': [2, 3, 1, 1, 1]
}

df = pd.DataFrame(data)

# 用.query()实现相同的过滤逻辑
df = df.query("not (name.str.contains('kim', case=False) and name.str.contains('jong', case=False) and std <= 1)")

代码说明

  1. 字符串匹配:用name.str.contains('kim', case=False)实现不区分大小写的子串检查,和布尔索引里的df['name'].str.contains('kim', case=False)效果完全一致。
  2. 逻辑组合:在.query()中用and代替布尔索引的&来组合多个条件,语法更贴近自然逻辑表达。
  3. 否定逻辑:用not包裹整个条件组,对应布尔索引里的~,实现“排除满足所有条件的行”的需求。

验证结果

运行上述代码后,会排除掉name同时包含'kim'和'jong'且std≤1的两行(Ajay Kim Jong、Kim Jong),最终得到的DataFrame和你原来的布尔索引过滤结果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 19:10:02