4
我有麻烦的熊猫查询功能,其中子表达式不包括任何框架的列。我希望下面给[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
班的某处丢失。
我考虑过的一种解决方法是仅将每个外部数据分配给列,但是当元数据本身包含列表时,这似乎会中断。
这些测试在jupyter中使用Pandas 0.16.2和numexpr 2.4.3运行。
感谢那@jezrael。我的表达式不是只包含标量值,因为我意识到在尝试选择一组行时这没有任何意义。这样的查询,比如'1 == 1'给''True'一个'keyError',这是可以理解的。 但我认识到我的表达式包含仅包含标量值的子表达式。这些文档规则是否也适用于子表达式?代码确实运行,但结果不正确。 –
我报告这个[问题](https://github.com/pydata/pandas/issues/11044) – jezrael
虽然我同意他们应该是等同的,但他们不是:结果是不同的。我在你的bug报告中写到了这一点,他们现在认为这是个bug。非常感谢你报告它 - 如果你更新答案,这是一个错误,我会接受它! –