【目录】
1. 知识回顾-索引取值
1.1 什么是索引?
1.2 索引取值
2. 知识回顾-布尔值
3. 逻辑表达式
4. 布尔索引定义
5. 布尔索引语法
6. 知识回顾-df['列索引']获取特定列的数据
7. `df[逻辑表达式]`选取数据
8. 实操练习
【正文】
学习时间:30分钟。
1. 知识回顾-索引取值
1.1 什么是索引?
索引
就是序列中的每个元素都对应的一个编号。
索引有正索引和负索引2种。
正数索引从左往右计数,负数索引从右往左计数。
正数索引从0
开始编号,负数索引从-1
开始编号。
例如,索引0
表示序列中的第一个元素。
例如,索引-1
表示序列中的最后一个元素。
1.2 索引取值
【语法】
s[0]
序列名。 英文中括号 []
。索引值。
[ ]英文中括号通常也称为索引操作符。
【代码示例:字符串索引取值】
# 将字符串Hello赋值给变量a
a = 'Hello'
# 序列名为a
# 索引操作符:英文中括号[]
# 索引值为0,取到字符串的第1个元素H
print(a[0])
【终端输出】
H
【代码示例:列表索引取值】
# 新建一个str列表
str_list = ["当归", "人参", "黄芪"]
# 序列名为str_list
# 索引操作符:英文中括号[]
# 索引值为1,取到列表的第2个元素人参
print(str_list[1])
【终端输出】
人参
索引相关知识可参考下面的链接:
2. 知识回顾-布尔值
布尔值是根据逻辑判断的结果而产生的值。
True 和 False,就叫做布尔值。
注意:True 和 False 不加引号,且首字母要大写!!!
3. 逻辑表达式
逻辑表达式用于将多个条件组合在一起,结果返回True或False。
常见的逻辑表达式有以下三种形式:
逻辑与:a and b
逻辑或:a or b
逻辑非:not b
逻辑与表达式(a and b):用于检查a和b是否都为True。只有当a和b都为True时,表达式的值才为True。
逻辑或表达式(a or b):用于检查a和b是否至少有一个为True。只要a和b中至少有一个为True,表达式的值就为True。
逻辑非表达式(not b):用于对b的值取反。如果b为False,则返回True;如果b为True,则返回False。
【代码示例】
print(True and False)
print(True or False)
print(not False)
【终端输出】
False
True
True
相关知识可参考如下基础知识笔记:
4. 布尔索引定义
布尔索引是一种使用布尔值(True或False)作为索引值来获取数组、DataFrame或其他数据结构中元素的方法。
我们把这句话拆开来看:
索引值 = 布尔值(True或False) 对象:数组、DataFrame 作用:获取数据结构的元素
【字符串索引】
索引值:元素的编号。 对象:字符串。 作用:字符串。
【作用】
布尔索引的作用是根据指定的条件来选择满足条件的元素。
通常用于过滤
、选择
和删除
数据。
5. 布尔索引语法
df[逻辑表达式]
df是要操作的对象,即DataFrame,也可以替换成其他的数据结构。 []
是索引操作符。索引值:布尔值(True或False) 逻辑表达式返回的结果就是布尔值。
布尔索引的参数是逻辑表达式,可以使用比较运算符(如==、>、<等)、逻辑运算符(如and、or、not等)和各种函数来构建复杂的条件。
【返回值】
返回一个布尔数组。
数组中的每个元素代表对应位置的元素是否满足条件。
通过将布尔数组作为索引值,可以选择满足条件的元素。
6. 知识回顾-df['列索引']获取特定列的数据
【代码示例】
# 导入pandas库并简写为pd
import pandas as pd
# 创建一个字典,包含要添加到DataFrame的数据
# 姓名 性别 年龄是字典的键,对应DataFrame的列索引
# ['赵', '钱', '孙', '李']字典的值,对应DataFrame的数据
data = {'姓名': ['赵', '钱', '孙', '李'],
'性别': ["男", "男", "女","女"],
'年龄': [20, 25, 30, 35]}
# 使用字典数据创建DataFrame对象
# pd库名,DataFrame类名
# 实例化对象语法:对象=类名( )
df = pd.DataFrame(data)
print(df)
【终端输出】
姓名 性别 年龄
0 赵 男 20
1 钱 男 25
2 孙 女 30
3 李 女 35
【df[列索引]
获取数据】
# 获取年龄列的数据
print(df['年龄'])
【终端输出】
0 20
1 25
2 30
3 35
Name: 年龄, dtype: int64
7. df[逻辑表达式]
选取数据
【目标任务】
获取上面df对象中年龄
一列大于25的数据。
【条件表达式】
条件表达式可以设置成 df['年龄'] > 25
。
【代码示例】
condition = df['年龄'] > 25
result = df[condition]
print(result)
【终端输出】
姓名 性别 年龄
2 孙 女 30
3 李 女 35
【查看condition】
condition = df['年龄'] > 25
print(condition)
print(type(condition))
【终端输出】
0 False
1 False
2 True
3 True
Name: 年龄, dtype: bool
<class 'pandas.core.series.Series'>
【代码解析】
df['年龄']
获取到了年龄这一列的所有数据。
df['年龄']>25
相当于给年龄列中的每一个数据都进行了一次比较运算,每一次比较的值大于25,结果就是 True;
小于等于25 结果就是 False,最终的运算结果以 Series 对象的形式进行返回。
df[condition]
通过Series对象去索引 df 数据,将结果为 True 对应位置的数据提取出来。
【完整代码1】
将逻辑表达式赋值给变量,将变量作为布尔索引的参数:
import pandas as pd
data = {'姓名': ['赵', '钱', '孙', '李'],
'性别': ["男", "男", "女","女"],
'年龄': [20, 25, 30, 35]}
df = pd.DataFrame(data)
# 筛选条件:逻辑表达式
condition = df['年龄'] > 25
# 布尔索引选取数据
result = df[condition]
print(result)
【终端输出】
姓名 性别 年龄
2 孙 女 30
3 李 女 35
【完整代码2】
直接把逻辑表达式作为布尔索引的参数:
import pandas as pd
data = {'姓名': ['赵', '钱', '孙', '李'],
'性别': ["男", "男", "女","女"],
'年龄': [20, 25, 30, 35]}
df = pd.DataFrame(data)
# 布尔索引:选取数据
result = df[df['年龄'] > 25]
print(result)
【终端输出】
姓名 性别 年龄
2 孙 女 30
3 李 女 35
df[df['年龄'] > 25]
提取出来的数据就是年龄大于25的数据。
8. 实操练习
【目标任务】
成绩表.xlsx
存储有10名学生的成绩。
成绩在0-100之间属于正常。
老师在统计成绩的时候可能出现了统计错误。
要求用布尔索引输出0-100之间的成绩。
【读取文件,创建df对象】
# 读取pandas库并简写为pd
import pandas as pd
# 文件的绝对路径
file = r"D:\安迪笔记\4.数据分析\15\成绩表.xlsx"
# sheet_name ="学生",读取学生sheet里的数据
df = pd.read_excel(file, sheet_name ="学生")
print(df)
【终端输出】
序号 学号 籍贯 性别 成绩
0 1 2023001 广东 男 -95
1 2 2023002 河南 男 96
2 3 2023003 湖北 男 97
3 4 2023004 广东 男 98
4 5 2023005 河南 男 99
5 6 2023006 河南 男 100
6 7 2023007 湖北 女 101
7 8 2023008 广东 女 102
8 9 2023009 河南 女 103
9 10 2023010 湖北 女 104
【1.统计输出小于等于100的成绩】
condition = df['成绩'] <= 100
df_1 = df[condition]
print(df_1)
【终端输出】
序号 学号 籍贯 性别 成绩
0 1 2023001 广东 男 -95
1 2 2023002 河南 男 96
2 3 2023003 湖北 男 97
3 4 2023004 广东 男 98
4 5 2023005 河南 男 99
5 6 2023006 河南 男 100
【2.统计输出大于0的成绩】
condition = df_1['成绩'] >= 0
df_2 = df_1[condition]
print(df_2)
【终端输出】
序号 学号 籍贯 性别 成绩
1 2 2023002 河南 男 96
2 3 2023003 湖北 男 97
3 4 2023004 广东 男 98
4 5 2023005 河南 男 99
5 6 2023006 河南 男 100
上面的代码我们分了2步走,先选出小于等于100的数据,赋值给变量df_1,然后在df_1中选出大于等于0的数据。
【一次性完成筛选】
除了分2步走,我们还可以利用&
一次性完成数据筛选。
condition = ((0 <= df['成绩']) & (df['成绩'] <= 100))
result = df[condition]
print(result)
【终端输出】
序号 学号 籍贯 性别 成绩
1 2 2023002 河南 男 96
2 3 2023003 湖北 男 97
3 4 2023004 广东 男 98
4 5 2023005 河南 男 99
5 6 2023006 河南 男 100
【代码总结】
# 读取pandas库并简写为pd
import pandas as pd
# 文件的绝对路径
file = r"D:\安迪笔记\4.数据分析\15\成绩表.xlsx"
# sheet_name ="学生",读取学生sheet里的数据
df = pd.read_excel(file, sheet_name ="学生")
condition = ((0 <= df['成绩']) & (df['成绩'] <= 100))
result = df[condition]
print(result)
【终端输出】
序号 学号 籍贯 性别 成绩
1 2 2023002 河南 男 96
2 3 2023003 湖北 男 97
3 4 2023004 广东 男 98
4 5 2023005 河南 男 99
5 6 2023006 河南 男 100