pandas 的逻辑运算符

您所在的位置:网站首页 python不等于怎么打出来 pandas 的逻辑运算符

pandas 的逻辑运算符

2023-10-28 16:55| 来源: 网络整理| 查看: 265

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 (81) print (81) print (not((81))) print (~((81))) #结果 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博客



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3