pandas 的逻辑运算符 | & ~

本文介绍了Pandas中用于逻辑操作的符号,如&表示逻辑与,|表示逻辑或,~表示逻辑非,这些与Python基础语法中的and、or、not不同。通过实例展示了如何使用这些符号在Pandas中进行条件筛选,包括AND、OR和NOT的组合使用,以及在数据框中提取满足特定条件的行。注意运算符的优先级和使用括号来明确表达式意图的重要性。
摘要由CSDN通过智能技术生成

1、逻辑与

Pandas中用符号 & 表示逻辑与,连接两个逻辑语句,同时为真才为真。

在Python基本语法中,使用 and 表示逻辑与,但是Pandas中只能用 & ,不能用and,会报模糊错误。

2、逻辑或

Pandas中用符号 | 表示逻辑或,连接两个逻辑语句,只要其中一个为真就为真。

在Python基本语法中,使用 or 表示逻辑或,但是Pandas中只能用 | ,不能用or。

3、逻辑非

Pandas中用符号 ~ (键盘左上角)表示逻辑非,对逻辑语句取反。

在Python基本语法中,使用 not 表示逻辑非,但是Pandas中只能用 ~ ,不能用not。

print (3==3)
print not(3==3)
print ~(3==3)

# 结果
True
False
-2



print (6>1) & (8>7)
print (6>1) and (8>7)
print (8<1) | (8>1)
print (8<1) or (8>1)
print (not((8<1) | (8>1)))
print (~((8<1) | (8>1)))

#结果
True
True
True
True
False
-2

| 对应 or

& 对应 and

~ 对应 not

s = pd.Series(range(-3, 4))
print s
print s[(s < -1) | (s > 0.5)]


0   -3
1   -2
2   -1
3    0
4    1
5    2
6    3
dtype: int64
0   -3
1   -2
4    1
5    2
6    3
dtype: int64

使用Pandas从多个条件(AND,OR,NOT)中提取行的方法。

有以下2点需要注意:

  • &,|,〜的使用(and、or、not的错误)
  • 使用比较运算符时,请将每个条件括在括号中。

以下数据为例。

import pandas as pd

df = pd.read_csv('./data/09/sample_pandas_normal.csv')
print(df)
#       name  age state  point
# 0    Alice   24    NY     64
# 1      Bob   42    CA     92
# 2  Charlie   18    CA     70
# 3     Dave   68    TX     70
# 4    Ellen   24    CA     88
# 5    Frank   30    NY     57

本例是使用pandas.DataFrame,但pandas.Series也同样适用。
首先,展示如何从pandas.DataFrame中提取(选择)行以获得新的pandas.DataFrame。


1、使用布尔列表(数组)或pandas.Series,只能提取(选择)True行。

mask = [True, False, True, False, True, False]
df_mask = df[mask]
print(df_mask)
#       name  age state  point
# 0    Alice   24    NY     64
# 2  Charlie   18    CA     70
# 4    Ellen   24    CA     88

2、通过AND,OR,NOT多个条件提取(选择)行的代码-示例
具有两个条件值的pandas.Series,可以使用&获得如下结果。在这里,为了便于说明,将==和〜用作二个条件,但是仅使用!=也是可以。

print(df['age'] < 35)
# 0     True
# 1    False
# 2     True
# 3    False
# 4     True
# 5     True
# Name: age, dtype: bool

print(~(df['state'] == 'NY'))
# 0    False
# 1     True
# 2     True
# 3     True
# 4     True
# 5    False
# Name: state, dtype: bool

print((df['age'] < 35) & ~(df['state'] == 'NY'))
# 0    False
# 1    False
# 2     True
# 3    False
# 4     True
# 5    False
# dtype: bool

仅提取(选择)True行。

df_and = df[(df['age'] < 35) & ~(df['state'] == 'NY')]
print(df_and)
#       name  age state  point
# 2  Charlie   18    CA     70
# 4    Ellen   24    CA     88

对于OR也是如此。使用|。

print((df['age'] < 20) | (df['point'] > 90))
# 0    False
# 1     True
# 2     True
# 3    False
# 4    False
# 5    False
# dtype: bool

df_or = df[(df['age'] < 20) | (df['point'] > 90)]
print(df_or)
#       name  age state  point
# 1      Bob   42    CA     92
# 2  Charlie   18    CA     70

3个以上条件的运算符的优先级
运算符的优先级是NOT(〜),AND(&),OR(|)。因此,结果因顺序而异。

df_multi_1 = df[(df['age'] < 35) | ~(df['state'] == 'NY') & (df['point'] < 75)]
print(df_multi_1)
#       name  age state  point
# 0    Alice   24    NY     64
# 2  Charlie   18    CA     70
# 3     Dave   68    TX     70
# 4    Ellen   24    CA     88
# 5    Frank   30    NY     57

df_multi_2 = df[(df['age'] < 35) & (df['point'] < 75) | ~(df['state'] == 'NY')]
print(df_multi_2)
#       name  age state  point
# 0    Alice   24    NY     64
# 1      Bob   42    CA     92
# 2  Charlie   18    CA     70
# 3     Dave   68    TX     70
# 4    Ellen   24    CA     88
# 5    Frank   30    NY     57

将每个组括在括号中比较安全。

df_multi_3 = df[((df['age'] < 35) | ~(df['state'] == 'NY')) & (df['point'] < 75)]
print(df_multi_3)
#       name  age state  point
# 0    Alice   24    NY     64
# 2  Charlie   18    CA     70
# 3     Dave   68    TX     70
# 5    Frank   30    NY     57

参考:09_Pandas从多个条件(AND,OR,NOT)中提取行_饺子大人的博客-CSDN博客

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

种麦南山下

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值