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

为何Pandas两种非空字符串查询方法返回结果不同?

问题解答

这两种查询方式的差异,核心是Pandas对StringDtype列中pd.NA的比较逻辑处理不同:

  • 对于布尔索引df[df.fruit != '']:
    StringDtype是Pandas专门的字符串类型,设计上明确了和空字符串的比较规则——pd.NA和''比较时,结果直接返回False,所以pd.NA对应的行被过滤掉,最终只保留非空且非NA的行。

  • 对于df.query("fruit != ''"):
    query方法使用的是Pandas表达式评估引擎,在这个环境下,pd.NA和''比较的结果是pd.NA而非布尔值。而query默认不会自动过滤NA结果的行,而是将NA视为等效于True来保留,所以包含pd.NA的行被留在结果里。

如果想让query的结果和布尔索引一致,可以加上na_action='ignore'参数,这样会自动过滤掉结果为NA的行:

df.query("fruit != ''", na_action='ignore')

执行后就会和df[df.fruit != '']得到完全相同的输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 02:37:03