据我了解的这个问题(来自C 的背景,目前正在学习Python的数据科学),我偶然发现了几篇文章,建议可以在类中重载按位运算符(&,|),就像C
一样。
因此,基本上,虽然您可以在数字上使用此类按位运算符,但它们将比较这些位并为您提供结果。因此,例如,如果您具有以下条件:
1 | 2#将导致3
Python实际要做的是比较这些数字的位:
00000001 | 00000010
结果将是:
00000011(因为0 | 0为False,因此为ergo 0; 0 | 1为True,因此为ergo 1)
作为整数:3
它比较数字的每一位,并吐出这八个连续操作的结果。这是这些操作员的正常行为。
输入熊猫。当您可以使这些运算符重载时,Pandas便利用了此功能。因此,当涉及到熊猫数据帧时,按位运算符将执行以下操作:
(dataframe1 [‘column’] ==“表达式”)&(dataframe1 [‘column’]!=“另一个表达式)
在这种情况下,第一个熊猫将根据==和!=运算的结果创建一系列对错(请
注意:您必须在括号外加上大括号,因为python始终会尝试解析第一个按位运算符,然后其他比较运算符!!
)。因此,它将列中的每个值与表达式进行比较,并输出true或false。
然后,您将获得两个相同长度的对与错。然后,要做的是将这两个系列取而代之,然后将它们与“和”(&)或“或”(|)进行比较,最后吐出一个单独的系列,即满足或不满足所有三个比较操作。
更进一步,我认为幕后情况是&运算符实际上调用了pandas函数,为它们提供了先前评估过的运算(因此运算符左右两个序列),然后将pandas比较一次使用两个不同的值,并根据确定该值的内部机制返回True或False。
这基本上是它们用于所有其他运算符(>,<,> =,<=,==,!=)的相同原理。
当您获得优美而整洁的“ and”时,为什么还要进行斗争并使用不同的表达?好吧,这似乎是因为“和”只是硬编码,不能手动更改。
希望有帮助!



