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

为何pandas.eval()执行字符串比较返回False?

问题原因与解决方案

核心原因

你遇到的问题根源在于pandas解析器(parser='pandas')对引号的处理规则和Python原生不同:

  • 在pandas解析器模式下,双引号用于引用DataFrame的列名,单引号才是表示字符串字面量的标准方式。
  • 你的代码中用双引号包裹"abc",pd.eval会将它们识别为列名而非字符串值,但当前没有传入任何DataFrame上下文,不存在名为abc的列,因此两个不存在的列引用比较结果返回False。

解决方案

有两种简单的修复方式:

  1. 改用单引号定义字符串字面量
    调整eval字符串内部的引号,用单引号包裹字符串,让pandas解析器正确识别为字符串值:

    import pandas as pd
    
    eval_string = "'abc'=='abc'"
    print(pd.eval(eval_string, parser='pandas'))  # True
    
  2. 显式构造字符串对象
    如果需要保留双引号,可以用str()函数显式将内容转为字符串对象:

    import pandas as pd
    
    eval_string = 'str("abc")==str("abc")'
    print(pd.eval(eval_string, parser='pandas'))  # True
    

为什么eq()函数能正常工作?

当你调用字符串的eq()方法时(比如"abc".eq("abc")),pandas解析器会将方法调用的主体和参数识别为Python字符串对象,而非列名引用,因此比较逻辑会正常执行,返回符合预期的True。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 03:55:10