用多个条件过滤Pandas数据框架

用多个条件过滤Pandas数据框架

在这篇文章中,让我们来讨论如何用多个条件过滤Pandas数据框。在整个软件开发过程中,有可能从Pandas数据框中用多个条件过滤数据。原因是数据框架可能有多列和多行。选择性地显示列和有限的行,总是用户所期望的观点。为了满足用户的期望,也为了帮助机器深度学习的场景,对Pandas数据框架进行多条件过滤是非常必要的。

让我们看看有哪些不同的方法。

创建一个样本数据框架以进一步开展工作

# import module
import pandas as pd
  
# assign data
dataFrame = pd.DataFrame({'Name': [' RACHEL  ', ' MONICA  ', ' PHOEBE  ',
                                   '  ROSS    ', 'CHANDLER', ' JOEY    '],
                            
                          'Age': [30, 35, 37, 33, 34, 30],
                            
                          'Salary': [100000, 93000, 88000, 120000, 94000, 95000],
                            
                          'JOB': ['DESIGNER', 'CHEF', 'MASUS', 'PALENTOLOGY',
                                  'IT', 'ARTIST']})
  
# display dataframe
display(dataFrame)

输出:

用多个条件过滤Pandas数据框架

方法1:使用定位

在这里,我们将从数据框中获得所有工资大于或等于100000,年龄小于40,工作以’D’开头的行。打印带有姓名和工作的详细信息。对于上述要求,我们可以通过使用loc来实现。它被用来通过标签或布尔数组访问单个或多个行和列。

# import module
import pandas as pd
  
# assign data
dataFrame = pd.DataFrame({'Name': [' RACHEL  ', ' MONICA  ', ' PHOEBE  ',
                                   '  ROSS    ', 'CHANDLER', ' JOEY    '],
                            
                          'Age': [30, 35, 37, 33, 34, 30],
                            
                          'Salary': [100000, 93000, 88000, 120000, 94000, 95000],
                            
                          'JOB': ['DESIGNER', 'CHEF', 'MASUS', 'PALENTOLOGY',
                                  'IT', 'ARTIST']})
# filter dataframe
display(dataFrame.loc[(dataFrame['Salary']>=100000) & (dataFrame['Age']< 40) & (dataFrame['JOB'].str.startswith('D')),
                    ['Name','JOB']])

输出:

用多个条件过滤Pandas数据框架

输出解决了给定的条件,最后,我们将只显示2列,即姓名和工作。

方法2:使用NumPy

这里将从数据框中获取所有工资大于或等于100000,年龄小于40,工作以’D’开头的行。我们需要使用NumPy

# import module
import pandas as pd
import numpy as np
  
# assign data
dataFrame = pd.DataFrame({'Name': [' RACHEL  ', ' MONICA  ', ' PHOEBE  ',
                                   '  ROSS    ', 'CHANDLER', ' JOEY    '],
                            
                          'Age': [30, 35, 37, 33, 34, 30],
                            
                          'Salary': [100000, 93000, 88000, 120000, 94000, 95000],
                            
                          'JOB': ['DESIGNER', 'CHEF', 'MASUS', 'PALENTOLOGY',
                                  'IT', 'ARTIST']})
  
# filter dataframe                                   
filtered_values = np.where((dataFrame['Salary']>=100000) & (dataFrame['Age']< 40) & (dataFrame['JOB'].str.startswith('D')))
print(filtered_values)
display(dataFrame.loc[filtered_values])

输出:

用多个条件过滤Pandas数据框架

在上面的例子中,print(filtered_values)将给出(array([0], dtype=int64),)的输出,这表明索引值为0的第一行将被输出。之后,输出将有1行所有的列,并根据给定的条件进行检索。

方法3:使用查询(评价和查询只对列起作用)

在这种方法中,我们从数据框架中获得所有工资小于或等于100000,年龄小于40,并且工作以’C’开头的记录。它只是用一个或多个布尔表达式来查询数据框架的列,如果是多个,它在中间有&条件。

# import module
import pandas as pd
  
# assign data
dataFrame = pd.DataFrame({'Name': [' RACHEL  ', ' MONICA  ', ' PHOEBE  ',
                                   '  ROSS    ', 'CHANDLER', ' JOEY    '],
                            
                          'Age': [30, 35, 37, 33, 34, 30],
                            
                          'Salary': [100000, 93000, 88000, 120000, 94000, 95000],
                            
                          'JOB': ['DESIGNER', 'CHEF', 'MASUS', 'PALENTOLOGY',
                                  'IT', 'ARTIST']})
  
# filter dataframe 
display(dataFrame.query('Salary  <= 100000 & Age < 40 & JOB.str.startswith("C").values'))

输出:

用多个条件过滤Pandas数据框架

方法4:Pandas布尔索引多条件标准方式(”布尔索引 “只对一列中的值起作用)

在这种方法中,我们从数据框中得到所有工资小于或等于100000,年龄小于40,工作以’P’开头的行。为了使用数据框架中的值来选择数据子集,并应用布尔条件,我们需要遵循以下方法

# import module
import pandas as pd
  
# assign data
dataFrame = pd.DataFrame({'Name': [' RACHEL  ', ' MONICA  ', ' PHOEBE  ',
                                   '  ROSS    ', 'CHANDLER', ' JOEY    '],
                            
                          'Age': [30, 35, 37, 33, 34, 30],
                            
                          'Salary': [100000, 93000, 88000, 120000, 94000, 95000],
                            
                          'JOB': ['DESIGNER', 'CHEF', 'MASUS', 'PALENTOLOGY',
                                  'IT', 'ARTIST']})
  
# filter dataframe 
display(dataFrame[(dataFrame['Salary']>=100000) & (dataFrame['Age']<40) & dataFrame['JOB'].str.startswith('P')][['Name','Age','Salary']])

输出:

用多个条件过滤Pandas数据框架

我们提到了一个需要被检索的列的列表以及布尔条件,由于许多条件,它有’&’。

**方法5:评估多个条件(”评估 “和 “查询 “只适用于列) **

在这里,我们从数据框中得到所有工资小于或等于100000,年龄小于40,工作以’A’开头的记录。

# import module
import pandas as pd
  
# assign data
dataFrame = pd.DataFrame({'Name': [' RACHEL  ', ' MONICA  ', ' PHOEBE  ',
                                   '  ROSS    ', 'CHANDLER', ' JOEY    '],
                            
                          'Age': [30, 35, 37, 33, 34, 30],
                            
                          'Salary': [100000, 93000, 88000, 120000, 94000, 95000],
                            
                          'JOB': ['DESIGNER', 'CHEF', 'MASUS', 'PALENTOLOGY',
                                  'IT', 'ARTIST']})
  
# filter dataframe 
display(dataFrame[dataFrame.eval("Salary <=100000 & (Age <40) & JOB.str.startswith('A').values")])

输出:

用多个条件过滤Pandas数据框架

数据框是Python中一个非常重要的概念,对数据的过滤需要根据不同的条件来进行。它们可以通过上述任何一种方式实现。需要注意的庞杂问题。

  • loc与列标签和索引一起工作。
  • evalquery只对列起作用。
  • 布尔索引只对一列中的值起作用。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程