Python 中 (&,|)和(and,or)之间的区别

今天老师讲pandas时,讲到布尔索引时,用的时 |  ,而不是 and

例如:

 1 np.random.seed(0)
 2 df = pd.DataFrame(np.random.randn(5,3), columns=list('ABC'))
 3 
 4 >>> df
 5           A         B         C
 6 0  1.764052  0.400157  0.978738
 7 1  2.240893  1.867558 -0.977278
 8 2  0.950088 -0.151357 -0.103219
 9 3  0.410599  0.144044  1.454274
10 4  0.761038  0.121675  0.443863
11 
12 >>> df.loc[(df.C > 0.25) | (df.C < -0.25)]
13           A         B         C
14 0  1.764052  0.400157  0.978738
15 1  2.240893  1.867558 -0.977278
16 3  0.410599  0.144044  1.454274
17 4  0.761038  0.121675  0.443863

如果a,b是数值变量, 则&, |表示位运算, and,or则依据是否非0来决定输出,

  • &, |:
1 | 2   #输出 3,用二进制加法计算
1 & 2   #输出 0,

and, or:

 # 判断变量是否为0, 是0则为False,非0判断为True,
 # and中含0,返回0; 均为非0时,返回后一个值, 
2 and 0   # 返回0
2 and 1   # 返回1
1 and 2   # 返回2

# or中, 至少有一个非0时,返回第一个非0,
2 or 0   # 返回2
2 or 1   # 返回2
0 or 1   # 返回1 

如何a, b是逻辑变量, 则两类的用法基本一致

In[103]:(3>0) | (3<1)
Out[103]: True
In[104]:(3>0) and (3<1)
Out[104]: False
In[105]:(3>0) or (3<1)
Out[105]: True
In[106]:(3>0) & (3<1)
Out[106]: False

在DataFrame的切片过程,要注意逻辑变量的使用

 

df.loc[(df.C > 0.25) | (df.C < -0.25)]

 

参考:  https://blog.csdn.net/weixin_40041218/article/details/80868521

  https://stackoverflow.com/questions/36921951/truth-value-of-a-series-is-ambiguous-use-a-empty-a-bool-a-item-a-any-o

 

posted @ 2020-05-12 13:12  代码人生#  阅读(926)  评论(0编辑  收藏  举报