Python中(&, |)与(and, or)运算符的区别及DataFrame使用注意事项
本文详解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]

参考解释
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









