1204 字
6 分钟
页面浏览--访问次数--
数据分析|比较函数

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。

# 检查是否至少有一个元素为 True
print(np.any([0, 1, 0, 0, 0]))
print(np.any([0, 0, 0, 0, 0]))
# 检查是否全部元素为 True
print(np.all([1, 1]))
print(np.all([1, 0]))

输出:

True
False
True
False

这两个函数常用于数据验证场景,例如检查数据集中是否存在缺失值、所有样本是否满足某个条件等。


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的保留原值,否则置0
print(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 篇,共 21 篇本文属于系列

数据分析|比较函数
https://luq-blog.xyz/posts/2026-07-02-data-notes-10-comparison/
作者
Luquiescene
发布于
2026-07-02
许可协议
CC BY-NC-SA 4.0

分享文章

生成精美分享图或复制链接,与更多人分享本文。

继续阅读

沿着主题读

基于共同的标签与分类

换条路线

从其他文章中稳定抽取

评论

正在加载评论...

最后更新于 ,距今已过 94 天

部分内容可能已过时