上一章节( https://juejin.cn/editor/drafts/7268594193933254719 )介绍了对于一个特定的数据集,如何从总体上通过统计分析的方法对其进行分析,以便了解数据集的规模,数值特点以及数据的分布情况。本章在了解数据集的基础上,介绍如何对数据集进行条件筛选,选出想要的数据。同时对于一些复杂的场景,现有的函数无法支持时,如何将自定义函数加入到pandas的数据分析中。
为了继续说明问题,本章继续引用上一章节的测试数据集,即两个班级5名学生的成绩单数据:
import pandas as pd
data = {
'NAME': ['Arial Johnson', 'Derek Davis', 'Latoya Mitchell', 'Tanisha Harris', 'Devin Price'],
'CLASS': ['A', 'A', 'A', 'B', 'B'],
'COURSE1': [99, 88, 81, 61, 97],
'COURSE2': [67, 76, 98, 58, 77],
'COURSE3': [93, 97, 91, 94, 51],
'COURSE4': [95, 65, 80, 53, 65]
}
df = pd.DataFrame(data)
6.条件筛选
6.1 条件判断方法
常用的条件运算符:
>
/>=
:大于/大于等于<
/<=
:小于/小于等于==
/!=
:等于/不等于
常用的逻辑运算符
&
:逻辑与|
:逻辑或~
:逻辑非
通过使用条件运算符和逻辑运算符的组合,我们可以创建复杂的布尔条件来进行数据集的筛选和选择。除此之外,由于df的一列相当于Series,可以用Series中的条件判断函数来实现。
isin
/notin
:用于判断Series中的值是否在给定的列表或集合中;isnull
/notnull
:用于判断Series中的值是否为NaN;
对于Series中的字符类型,可以用pandas.core.strings.StringMethods
中的关于字符型的条件判断方法。
str.contains()
:检查字符串中是否包含指定的子串str.isalnum()
:检查字符串是否由字母和数字组成str.isalpha()
:检查字符串是否由字母组成str.isdigit()
:检查字符串是否由数字组成str.isdecimal()
:检查字符串是否由十进制数字组成str.islower()
:检查字符串是否全小写str.isupper()
:检查字符串是否全大写str.istitle()
:检查字符串是否以大写字母开头str.match()
:检查字符串是否与指定的正则表达式匹配str.startswith()
:检查字符串是否以指定的前缀开头
在Pandas中,可以使用条件筛选来过滤数据集中符合特定条件的行,Pandas 提供了多种方法来进行条件筛选,包括使用布尔索引、使用 query()
函数和使用 loc
和 iloc
索引器。下面逐一介绍这些方法的用法。
6.2 布尔索引
在 Pandas 中,布尔索引是一种使用布尔条件(True/False)来选择数据集中行的方法。通过使用布尔条件,我们可以筛选出符合特定条件的行,并进行数据集的条件筛选和子集选择。布尔索引也叫布尔数组,数组的长度与数据的行数相同。
我们将各门课程考试分数大于等于80分作为优秀,并以此作为条件判断,可生成一个布尔数组:
>>> df['COURSE1'] > 80
0 True
1 True
2 True
3 False
4 True
Name: COURSE1, dtype: bool
# 通过布尔数组,筛选出课程1考试优秀的记录:
>>> df[df['COURSE1'] >= 80]
NAME CLASS