721 字
4 分钟
数据分析|排序函数

11.1 排序函数概述
在数据分析中,排序和去重是数据预处理的基本操作。NumPy 提供了高效的排序函数,下表列出了本节涉及的主要函数:
| 函数 | 功能 |
|---|---|
np.sort(x) | 返回排序后的新数组(原数组不变) |
x.sort() | 原地排序,直接修改原数组 |
np.argsort(x) | 返回排序后各元素在原数组中的索引 |
np.lexsort(keys) | 根据多个键进行间接排序 |
np.unique(x) | 返回去重并排序后的唯一值 |
np.in1d(a, b) | 检查 a 中的元素是否存在于 b 中 |
11.2 np.sort() 与 arr.sort()
np.sort() 返回排序后的新数组,原数组保持不变;arr.sort() 是数组的方法,会原地修改原数组。
import numpy as np
np.random.seed(0)arr = np.random.randint(1, 100, 20)print(arr)输出:
[45 48 65 68 68 10 84 22 37 88 71 89 89 13 59 66 40 88 47 89]# np.sort() 返回新数组,原数组不变print(np.sort(arr))print(arr) # 原数组不变输出:
[10 13 22 37 40 45 47 48 59 65 66 68 68 71 84 88 88 89 89 89][45 48 65 68 68 10 84 22 37 88 71 89 89 13 59 66 40 88 47 89]# arr.sort() 原地排序,修改原数组arr.sort()print(arr) # 原数组已被修改输出:
[10 13 22 37 40 45 47 48 59 65 66 68 68 71 84 88 88 89 89 89]选择建议:
- 需要保留原始数据顺序时,使用
np.sort()。 - 不需要保留原始数据且希望节省内存时,使用
arr.sort()。
11.3 np.argsort()
np.argsort() 不返回排序后的值,而是返回排序后各元素在原数组中的索引位置。这在需要按一个数组的顺序排列另一个数组时非常有用。
np.random.seed(0)arr = np.random.randint(1, 100, 20)print(arr)print(np.argsort(arr))输出:
[45 48 65 68 68 10 84 22 37 88 71 89 89 13 59 66 40 88 47 89][ 5 13 7 8 16 0 18 1 14 2 15 3 4 10 6 17 9 11 12 19]结果解读:
argsort返回值的第一个元素是5,表示排序后最小的元素(10)在原数组的索引 5 位置。- 验证:
arr[5]= 10,确实是最小值。 arr[argsort]等价于np.sort(arr)。
11.4 np.unique() 去重
np.unique() 返回数组中去重并排序后的唯一值。
np.random.seed(0)arr = np.random.randint(1, 100, 20)print(arr)print(np.unique(arr))输出:
[45 48 65 68 68 10 84 22 37 88 71 89 89 13 59 66 40 88 47 89][10 13 22 37 40 45 47 48 59 65 66 68 71 84 88 89]原始数组有 20 个元素,去重后剩下 16 个唯一值,且默认按升序排列。在数据分析中,np.unique() 常用于统计类别、去除重复样本等场景。
11.5 本节小结
本节完成了以下内容:
- 掌握了
np.sort()(返回新数组)与arr.sort()(原地排序)的区别与适用场景。 - 掌握了
np.argsort()返回排序索引的用法及其解读方式。 - 掌握了
np.unique()去重并排序的功能。
下一节我们将对 NumPy 章节进行整体回顾与小结,梳理本章的核心知识点。
数据分析
连载中分享文章
生成精美分享图或复制链接,与更多人分享本文。
继续阅读
换条路线
从其他文章中稳定抽取
最后更新于 ,距今已过 94 天
部分内容可能已过时
评论