使用Pandas从多个条件(AND,OR,NOT)中提取行的方法。
有以下2点需要注意:
- &,|,〜的使用(and、or、not的错误)
- 使用比较运算符时,请将每个条件括在括号中。
以下数据为例。
1
2
3
4
5
6
7
8
9
10
11
|
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。
使用布尔列表(数组)或pandas.Series,只能提取(选择)True行。
1
2
3
4
5
6
7
|
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 |
通过AND,OR,NOT多个条件提取(选择)行的代码-示例
具有两个条件值的pandas.Series,可以使用&获得如下结果。在这里,为了便于说明,将==和〜用作二个条件,但是仅使用!=也是可以。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
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行。
1
2
3
4
5
|
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也是如此。使用|。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
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(|)。因此,结果因顺序而异。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
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 |
将每个组括在括号中比较安全。
1
2
3
4
5
6
7
|
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 |
到此这篇关于Pandas多个条件(AND,OR,NOT)中提取行的文章就介绍到这了,更多相关Pandas多条件提取行内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!
原文链接:https://blog.csdn.net/qq_18351157/article/details/105403779