图片来源:《星空列车与白的旅行》CG及二创
945 字
2 分钟
笔记|数据分析学习笔记10|比较函数
本系列所有文章都放在
数据科学标签,总目录如下:
10.1 比较函数概述
数据分析中经常需要根据条件筛选数据,NumPy 提供了一系列比较函数来实现逐元素的条件判断。下表列出了本节涉及的比较函数:
| 函数 | 功能 |
|---|---|
np.greater(a, b) | 逐元素判断 a 是否大于 b |
np.less(a, b) | 逐元素判断 a 是否小于 b |
np.equal(a, b) | 逐元素判断 a 是否等于 b |
np.logical_and(a, b) | 逐元素逻辑与运算 |
np.logical_or(a, b) | 逐元素逻辑或运算 |
np.logical_not(a) | 逐元素逻辑非运算 |
np.any(a) | 检查数组中是否至少有一个 True |
np.all(a) | 检查数组中是否全部元素为 True |
np.where(condition, x, y) | 根据条件选择元素 |
np.select(condlist, choicelist) | 多条件选择元素 |
10.2 大于、小于、等于
这三个函数用于逐元素比较两个数组(或数组与标量)的大小关系,返回布尔数组。
import numpy as np
# 是否大于print(np.greater([3, 4, 5, 6, 7], 4))# 是否小于print(np.less([3, 4, 5, 6, 7, 8], 4))# 是否等于print(np.equal([3, 4, 5, 6, 7, 8], 4))print(np.equal([3, 4, 5], [4, 4, 4]))输出:
[False False True True True][ True False False False False False][False True False False False False][False True False]要点说明:
- 当第二个参数是标量时,每个元素与该标量比较,等价于使用
>、<、==运算符。 - 当两个数组长度相同时,逐位置一一对应比较。
- 返回值是一个布尔数组,常配合布尔索引使用(参见第6节)。
10.3 逻辑运算
np.logical_and()、np.logical_or() 和 np.logical_not() 用于对布尔数组进行逐元素的逻辑运算。
print(np.logical_and([1, 0], [1, 1])) # 逻辑与print(np.logical_not([1, 0])) # 逻辑非print(np.logical_or([0, 0], [1, 0])) # 逻辑或输出:
[ True False][False True][ True False]要点说明:
np.logical_and():两个输入都为真时返回True。np.logical_or():至少一个输入为真时返回True。np.logical_not():对布尔值取反。- 在布尔索引中组合多个条件时,使用
&(与)、|(或)运算符(参见第6节)。
10.4 any 与 all
np.any() 检查数组中是否至少有一个 True,np.all() 检查数组中是否全部为 True。
# 检查是否至少有一个元素为 Trueprint(np.any([0, 1, 0, 0, 0]))print(np.any([0, 0, 0, 0, 0]))
# 检查是否全部元素为 Trueprint(np.all([1, 1]))print(np.all([1, 0]))输出:
TrueFalseTrueFalse这两个函数常用于数据验证场景,例如检查数据集中是否存在缺失值、所有样本是否满足某个条件等。
10.5 np.where()
np.where(condition, x, y) 是条件筛选的核心函数。当 condition 为 True 时取 x 对应的值,否则取 y 对应的值。
arr = np.array([1, 2, 3, 4, 5])
print(np.where(arr > 3, arr, 0)) # 大于3的保留原值,否则置0print(np.where(arr < 3, 1, 0)) # 小于3的置1,否则置0输出:
[0 0 0 4 5][1 1 0 0 0]实际应用:成绩等级评定
score = np.random.randint(50, 100, 20)print(score)print(np.where(score >= 60, '及格', '不及格'))输出(结果随机):
[53 89 59 69 71 86 73 56 74 74 62 51 88 89 73 96 74 67 87 75]['不及格' '及格' '不及格' '及格' '及格' '及格' '及格' '不及格' '及格' '及格' '及格' '不及格' '及格' '及格' '及格' '及格' '及格' '及格' '及格' '及格']嵌套 np.where() 实现多级判定:
print(np.where( score < 60, '不及格', np.where( score < 80, '良好', '优秀' )))输出(结果随机):
['不及格' '优秀' '不及格' '良好' '良好' '优秀' '良好' '不及格' '良好' '良好' '良好' '不及格' '优秀' '优秀' '良好' '优秀' '良好' '良好' '优秀' '良好']通过嵌套 np.where(),可以实现”不及格 / 良好 / 优秀”三级分类。逻辑是:先判断是否小于 60,若是则”不及格”;否则再判断是否小于 80,若是则”良好”,否则”优秀”。
10.6 np.select()
当条件分支较多时,嵌套 np.where() 可读性较差。np.select(condlist, choicelist) 提供更清晰的多条件选择方式。
print(np.select( [score > 80, (score >= 60) & (score <= 80), score < 60], ['优秀', '良好', '不及格'], default='未知'))输出(结果随机):
['不及格' '优秀' '不及格' '良好' '良好' '优秀' '良好' '不及格' '良好' '良好' '良好' '不及格' '优秀' '优秀' '良好' '优秀' '良好' '良好' '优秀' '良好']要点说明:
condlist:条件列表,按顺序逐一判断,命中的第一个条件对应的值被选中。choicelist:返回值列表,与条件列表一一对应。default:当所有条件都不满足时的兜底值。- 条件按顺序匹配(类似
if-elif-else),排在前面的条件优先级更高。
10.7 本节小结
本节完成了以下内容:
- 掌握了
np.greater()、np.less()、np.equal()逐元素比较函数。 - 掌握了
np.logical_and()、np.logical_or()、np.logical_not()逻辑运算。 - 掌握了
np.any()和np.all()的数组整体真值判断。 - 掌握了
np.where()条件筛选与嵌套多级判定。 - 掌握了
np.select()多条件选择及其default参数。
下一节我们将学习 NumPy 中的排序函数,包括排序、去重、数组拼接与分割。
分享
如果这篇文章对你有帮助,欢迎分享给更多人!
笔记|数据分析学习笔记10|比较函数
https://luq-blog.xyz/posts/2026-07-02-data-notes-10-comparison/ 部分信息可能已经过时
相关文章 智能推荐
1
笔记|数据分析学习笔记11|排序函数
理工研习 本节介绍 NumPy 中的排序函数,包括数组排序、索引排序、去重与成员检测,掌握数据整理的核心方法。
2
笔记|数据分析学习笔记09|统计函数
理工研习 学习NumPy中的统计函数,包括求和、平均值、中位数、标准差、方差、最值、分位数、累积和与累积积。
3
笔记|数据分析学习笔记08|基本数学函数
理工研习 学习NumPy中的基本数学函数,包括平方根、指数、对数、三角函数、绝对值、幂运算、取整和缺失值检测。
4
笔记|数据分析学习笔记13|Pandas介绍
理工研习 本节介绍 Pandas 库的基础概念,包括其核心设计理念、与 NumPy 的关系,以及 Series 和 DataFrame 两大核心数据结构的对比。
5
笔记|数据分析学习笔记21|DataFrame案例
理工研习 本节通过学生成绩、销售数据、电商用户行为三个实际案例,综合运用 DataFrame 的创建、列运算、条件筛选、排序和聚合等操作。
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)