Pandas多个条件(AND,OR,NOT)中提取行

本文主要介绍了Pandas多个条件(AND,OR,NOT)中提取行,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

使用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。

使用布尔列表(数组)或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 

通过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 

到此这篇关于Pandas多个条件(AND,OR,NOT)中提取行的文章就介绍到这了,更多相关Pandas多条件提取行内容请搜索0133技术站以前的文章或继续浏览下面的相关文章希望大家以后多多支持0133技术站!

以上就是Pandas多个条件(AND,OR,NOT)中提取行的详细内容,更多请关注0133技术站其它相关文章!

赞(0) 打赏
未经允许不得转载:0133技术站首页 » python