为何pandas.eval()执行字符串比较返回False?
问题原因与解决方案
核心原因
你遇到的问题根源在于pandas解析器(parser='pandas')对引号的处理规则和Python原生不同:
- 在pandas解析器模式下,双引号用于引用DataFrame的列名,单引号才是表示字符串字面量的标准方式。
- 你的代码中用双引号包裹
"abc",pd.eval会将它们识别为列名而非字符串值,但当前没有传入任何DataFrame上下文,不存在名为abc的列,因此两个不存在的列引用比较结果返回False。
解决方案
有两种简单的修复方式:
改用单引号定义字符串字面量
调整eval字符串内部的引号,用单引号包裹字符串,让pandas解析器正确识别为字符串值:import pandas as pd eval_string = "'abc'=='abc'" print(pd.eval(eval_string, parser='pandas')) # True显式构造字符串对象
如果需要保留双引号,可以用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
相关产品推荐
相关产品推荐

