当前位置: 首页 > 面试题库 >

在构建Pandas DataFrame中使用逻辑运算符

夏飞掣
2023-03-14
问题内容

我有两段熊猫代码,我认为它们应该是等效的,但是第二段代码并没有达到我的期望。

# snippet 1
    data = all_data[[((np.isfinite(all_data[self.design_metric][i]) 
                    and all_data['Source'][i] == 2)) 
                    or ((np.isfinite(all_data[self.actual_metric][i]) 
                    and all_data['Source'][i] != 2))
                    for i in range(len(all_data))]]


# snippet 2
    data = all_data[(all_data['Source'] == 2 &
                    np.isfinite(all_data[self.design_metric])) |
                    (all_data['Source'] != 2 &
                    np.isfinite(all_data[self.actual_metric]))]

每个部分(例如all_data['Source'] == 2)都按照自己的期望进行操作,但是似乎我在逻辑运算符上做错了,因为最终结果与列表理解版本的结果不同。


问题答案:

&操作者比结合更紧密地==(或任何比较操作符)。请参阅文档。一个简单的例子是:

>>> 2 == 2 & 3 == 3
False

这是因为将其分组为2 == (2 & 3) == 3,然后调用了比较链接。这就是您的情况。您需要在每个比较之间加上括号。

 data = all_data[((all_data['Source'] == 2) &
                np.isfinite(all_data[self.design_metric])) |
                ((all_data['Source'] != 2) &
                np.isfinite(all_data[self.actual_metric]))]

请注意==!=比较中的多余括号。



 类似资料:
  • and, or, not 其中,and 和 or 与 C 语言区别特别大。 在这里,请先记住,在 Lua 中,只有 false 和 nil 才计算为 false,其它任何数据都计算为 true,0 也是 true! and 和 or 的运算结果不是 true 和 false,而是和它的两个操作数相关。 a and b: 如果 a 为 false,则返回 a;否则返回 b a or b: 如果 a

  • 2.2.1关系表达式 a) 关系运算符 关系运算符就是关系比较符。Fortran中有六个关系运算符: 关系运算符 英语含义 所代表的数学符号 .GT. .GE. .LT. .LE. .EQ. .NE. > >= < <= == /= Greater Than Greater than or Equal to Less Than Less than or Equal to EQual to Not

  • JavaScript 中有三个逻辑运算符:||(或),&&(与),!(非)。 虽然它们被称为“逻辑”运算符,但这些运算符却可以被应用于任意类型的值,而不仅仅是布尔值。它们的结果也同样可以是任意类型。 让我们来详细看一下。 ||(或) 两个竖线符号表示“或”运算符: result = a || b; 在传统的编程中,逻辑或仅能够操作布尔值。如果参与运算的任意一个参数为 true,返回的结果就为 tr

  • 2.4.2 逻辑运算 仅用简单布尔表达式是不够的,复杂条件需要用复杂布尔表达式来描述。将多个简单布 尔表达式用逻辑运算符联结起来,即可构成复杂布尔表达式。Python 语言支持的逻辑运算 符有三个:and、or 和 not。 逻辑运算符 and 逻辑运算符 and 联结两个布尔表达式,并得到一个新的布尔表达式。形如: <布尔表达式 1> and <布尔表达式 2> 新表达式的值依赖于参加 and

  • 我有点好奇下面的代码中是否有我遗漏的东西, 我希望用户输入或或的逻辑,我想使用语句将其转移到另一个类。如果不是这样,我使用部分返回布尔值。 有一个循环,将控件发送回同一个函数,直到用户输入所需的值。 在运行程序时,无论接收到什么输入,它都不会进入部分。

  • 主要内容:逻辑非运算(NOT 或者 !),逻辑与运算符(AND 或者 &&),逻辑或运算符(OR 或者 ||),异或运算(XOR 运算符)逻辑运算符又称为布尔运算符,用来确定表达式的真和假。 MySQL中支持的逻辑运算符如下表所示。 MySQL 中的逻辑运算符 运算符 作用 NOT 或者 ! 逻辑非 AND 或者 && 逻辑与 OR 和 || 逻辑或 XOR 逻辑异或   下面分别讨论 MySQL 逻辑运算符的使用方法。 逻辑非运算(NOT 或者 !) 和 都是逻辑非运算符,返回和操作数相反的结