python – pandas数据框中的逻辑或/按位OR
作者:互联网
我试图使用布尔掩码从2个不同的数据帧获得匹配.
ü
使用逻辑OR运算符:
x = df[(df['A'].isin(df2['B']))
or df['A'].isin(df2['C'])]
Output:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
但是,使用按位OR运算符,结果将成功返回.
x = df[(df['A'].isin(df2['B']))
| df['A'].isin(df2['C'])]
Output: x
这两者是否存在差异并且按位或者是最佳选择?为什么逻辑OR不起作用?
解决方法:
至于我已经理解了这个问题(来自C背景,目前正在学习数据科学的Python),我偶然发现了一些帖子,表明按位运算符(&,|)可以在类中重载,就像C一样.
所以基本上,虽然你可以在数字上使用这样的按位运算符,但它们会比较这些位并给出结果.例如,如果您有以下内容:
1 | 2 # will result in 3
Python实际上要做的是比较这些数字的位:
00000001 | 00000010
结果将是:
00000011(因为0 | 0为False,ergo 0; 0 | 1为True,ergo 1)
整数:3
它比较数字的每一位并吐出这八个连续操作的结果.这是这些操作符的正常行为.
输入熊猫.由于你可以重载这些操作符,Pandas已经使用了这个.那么在进入pandas数据帧时,运算符的位运行方式如下:
(dataframe1[‘column’] == “expression”) & (dataframe1[‘column’] != “another expression)
在这种情况下,第一个pandas将根据==和!=操作的结果创建一系列的trues或falses(注意:你必须在外部表达式周围放置大括号,因为python总是会尝试解析第一个按位运算符和那么其他比较运算符!!).因此,它会将列中的每个值与表达式进行比较,并输出true或false.
然后你会有两个相同长度的真理和谬误系列.它的作用是采取这两个系列并基本上将它们与“和”(和)或“或”(|)进行比较,最后吐出一个系列,或者完成或不完成所有三个比较操作.
为了更进一步,我认为发生在幕后的是& -operator实际上调用了pandas的函数,给它们先前评估的操作(所以操作符左侧和右侧的两个系列)和熊猫然后一次比较两个不同的值,根据内部机制返回True或False以确定这一点.
这基本上与他们用于所有其他运算符的原理相同(>,<,> =,< =,==,!=). 当你得到漂亮而整洁的“和”时,为什么要挣扎并使用不同的& -expression?好吧,这似乎是因为“和”只是硬编码而且无法手动更改. 希望有所帮助!
标签:python,pandas,bitwise-operators,logical-operators 来源: https://codeday.me/bug/20191007/1866200.html