NumPy中unique()函数实现数组去重与统计的详细用法
本文详解NumPy库中unique()函数的核心参数与实操流程,涵盖一维与多维数组去重、首次出现索引提取、输入矩阵重建及元素频次统计方法。提供可直接运行的代码示例与避坑指南,帮助开发者高效完成数据清洗、重复值过滤与分布特征查询。
1. 核心功能与参数配置
numpy.unique() 是Python数据分析中用于去除数组重复元素的标准工具。该函数默认按升序返回排序后的不重复值,支持对高维数据进行轴向切分处理。使用前需确保已正确导入模块:import numpy as np。
完整函数签名如下:
numpy.unique(ar, return_index=False, return_inverse=False, return_counts=False, axis=None, *, equal_nan=True)
ar:输入数组。未设定axis时自动展平为一维向量处理。return_index:布尔值。设为True时额外返回各唯一元素在原始数组中首次出现的索引位置。return_inverse:布尔值。设为True时额外返回可通过索引重建原始数组的映射关系数组。return_counts:布尔值。设为True时额外返回每个唯一元素在原始数据中的累计出现次数。axis:整型或None。指定计算唯一性的维度。默认为None(全局处理)。equal_nan:布尔值。控制是否将NaN视作相同值合并去重,默认开启。
2. 第1步:执行基础数组去重
适用于常规一维列表或二维表格清理。当 axis 为空时,无论输入几维,均会压平为一维后去重排序;传入具体轴号则保留该维度的结构特征。
第1步:执行基础一维去重
a = np.array([1, 1, 2, 2, 3, 3])
result = np.unique(a)
print(result)
# 输出: [1 2 3]
第2步:执行二维数据按行去重
在数据处理中常需剔除完全相同的记录行。设置 axis=0 即可锁定行进行比对:
b = np.array([[1, 0, 0], [1, 0, 0], [2, 3, 4]])
result_2d = np.unique(b, axis=0)
print(result_2d)
# 输出: [[1 0 0] [2 3 4]]
3. 第2步:提取首次出现索引(return_index)
当需要定位原始数据中某个去重值的物理位置时使用。该参数返回的索引顺序与去重后的新数组严格对应。
c = np.array(['a', 'b', 'b', 'c', 'a'])
u, indices = np.unique(c, return_index=True)
print("去重结果:", u)
print("首次出现位置:", indices)
# 输出: ['a' 'b' 'c'] \n [0 1 3]
4. 第3步:重建原始输入矩阵(return_inverse)
获取逆映射索引后,可通过对新数组进行二次索引运算,完美还原原始序列的数据走向。此特性常用于状态编码转换与特征对齐。
d = np.array([1, 2, 6, 4, 2, 3, 2])
u, inv_indices = np.unique(d, return_inverse=True)
rebuilt = u[inv_indices]
print("唯一值数组:", u)
print("重建索引映射:", inv_indices)
print("还原结果:", rebuilt)
# 输出完全等于初始数组 d 的内容
5. 第4步:统计元素频次并查找高频值(return_counts)
直接替代传统的循环计数逻辑,快速完成数据分布分析与异常点检测。
# 模拟业务流水数据
e = np.array([1, 1, 1, 3, 3, 2, 2, 2, 2, 4, 5, 5])
# 同时获取唯一元素与其出现次数
elements, counts = np.unique(e, return_counts=True)
print("元素列表:", elements)
print("对应频次:", counts)
# 利用 argmax 快速定位出现最频繁的目标值
most_frequent_idx = np.argmax(counts)
mode_value = elements[most_frequent_idx]
print("最高频元素:", mode_value)
# 注:避免直接使用 python 原生 zip 迭代器配合 max() 导致容器被提前耗尽的问题,采用内置数学索引更为稳定。
6. 注意事项与常见排错
- 内存消耗预警:处理超大数组时,去重与索引重建会在内存中生成多份副本。建议在关键节点前备份原始数据或使用分块读取策略,防止进程 OOM 崩溃。
- 迭代器生命周期:部分开发者习惯将
return_counts的结果直接传入 Python 原生max()寻找极值,这会触发ValueError: max() arg is an empty sequence错误。正确做法是先保存返回值变量,再调用np.argmax()或独立迭代。 - 版本兼容性:NumPy v1.9 之后正式引入
axis参数,若运行环境为极老版本需升级以支持多维轴向处理。
以上就是 NumPy unique 函数实现数组去重与统计的详细内容,更多关于 Python 数据处理的基础资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













