Python中(&, |)与(and, or)运算符的区别及DataFrame使用注意事项

Alice
Alice
发布时间:2026-10-13 | 6人浏览过
原创

本文详解Python中(&, |)与(and, or)两组运算符的区别。数值变量下,前者执行位运算,后者依据非零值返回结果;逻辑变量下两者行为一致。重点指出在Pandas DataFrame多条件筛选时,必须使用&和|进行元素级逻辑运算,若误用and/or会引发ValueError。

Python中(&, |)与(and, or)的基本区别

在Python中,(&, |)与(and, or)是两组外观相似但机制不同的运算符,均用于处理“与”和“或”逻辑,但在具体用法和返回值上存在显著差异。它们通常用于比较两个变量,基本语法格式如下:


a & b
a | b
a and b
a or b

当变量a和b为数值类型时,(&, |)执行位运算(bitwise operation),而(and, or)则根据数值是否非零来判断真值,并返回相应的操作数。

&, |:


# 1&2,2在二进制里面是10,1在二进制中是01,那么01与运算10得到是0 


1 & 2     # 输出为 0, 
1 | 2     # 输出为3

具体来看(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多条件筛选中的关键注意事项

需要特别注意的是,在使用Pandas DataFrame进行数据切片时,逻辑变量的处理方式至关重要。

当需要筛选满足多个逻辑条件的数据时,必须使用&和|。如果在DataFrame操作中错误地使用and或or,程序会报错‘ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().'。


target_url = "http://aima.cs.berkeley.edu/data/iris.csv"
data = pd.read_csv(target_url, header=None, columns=['s_line', 's_wid', 'p_line', 'p_wid', 'kind'])
data.columns = ['s_line', 's_wid', 'p_line', 'p_wid', 'kind']
x_data = data.iloc[:, :-1]

# 在多个逻辑条件下,用& 或者|,
x_1 = x_data[x_data['s_line'] > 6 & x_data['p_wid'] > 0]


参考解释

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表