Pandas多个条件中怎么提取行
本文小编为大家详细介绍“Pandas多个条件中怎么提取行”,内容详细,步骤清晰,细节处理妥当,希望这篇“Pandas多个条件中怎么提取行”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
使用Pandas从多个条件(AND,OR,NOT)中提取行的方法。
有以下2点需要注意:
&,|,〜的使用(and、or、not的错误)
使用比较运算符时,请将每个条件括在括号中。
以下数据为例。
import pandas as pddf = 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: boolprint(~(df['state'] == 'NY'))# 0 False# 1 True# 2 True# 3 True# 4 True# 5 False# Name: state, dtype: boolprint((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: booldf_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 57df_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多个条件中怎么提取行”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网行业资讯频道。
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341