加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 具有不包含列名的子表达式的Pandas查询函数

发布时间:2020-12-20 13:52:54 所属栏目:Python 来源:网络整理
导读:我在使用pandas查询函数时遇到问题,其中子表达式不包含任何框架的列.我希望以下内容给出[True,False],但事实上它会响应[False,True]: df = pd.DataFrame( {'col1':[1,0]} )col10 11 0external_var = 'yes'df.eval( '(@external_var == "yes") == col1' )0 F
我在使用pandas查询函数时遇到问题,其中子表达式不包含任何框架的列.我希望以下内容给出[True,False],但事实上它会响应[False,True]:

df = pd.DataFrame( {'col1':[1,0]} )

col1
0     1
1     0

external_var = 'yes'
df.eval( '(@external_var == "yes") == col1' )

0     False
1     True

这个问题似乎与使用external_var无关,因为

df.eval(‘(“yes”==“yes”)== col1’)
给出了相同的意外结果.

上下文

我的用例是编写一个系统,根据非程序员可以编写的规则将点分配给项目表.规则将取决于外部事件元数据(因此是external_var比较),将其与帧中的列进行比较.查询函数似乎是理想的,但它似乎没有按预期行事.我尝试阅读源代码,但在PandasExprVisitor类的某处丢失了.

我考虑过的一个解决方法是将每个外部数据分配给一个列,但是当元数据本身包含列表时,这似乎会中断.

这些测试使用Pandas 0.16.2和numexpr 2.4.3在jupyter中运行.

解决方法

这是bug( GH11044),可能会在Next Major Release里程碑中得到纠正.

In [9]: df.eval( '("yes" == "yes")')
Out[9]: False

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读