【机器学习】数据清洗——基于Numpy库的方法删除重复点

在这里插入图片描述

🎈个人主页:豌豆射手^
🎉欢迎 👍点赞✍评论⭐收藏
🤗收录专栏:机器学习
🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进步!

【机器学习】数据清洗——基于Numpy库的方法删除重复点

  • 一 numpy.unique函数介绍
    • 1.1 语法
    • 1.2 参数
    • 1.3 返回值
    • 1.4 示例
    • 1.5 注意事项
  • 二 基于行删除重复值
    • 2.1 导入 Numpy 库:
    • 2.2 创建包含重复行的数组:
    • 2.3 使用 numpy.unique() 函数删除重复行后的数组以及唯一行在原始数组中的索引。:
    • 2.4 对唯一值索引进行排序:
    • 2.5 根据排序后的索引获取唯一行:
    • 2.6 打印原始数组和删除重复行并保留顺序后的数组:
    • 2.7 全部代码:
  • 三 基于列删除重复值
    • 3.1 导入 NumPy 库:
    • 3.2 创建包含重复列的数组:
    • 3.3 使用 np.unique() 函数获取唯一列索引:
    • 3.4 对索引进行排序:
    • 3.5 对数组进行转置:
    • 3.6 选择唯一列:
    • 3.7 再次对数组进行转置:
    • 3.8 打印删除重复列并保留顺序后的数组:
    • 3.9 全部代码:
  • 四 基于全部点删除重复值
    • 4.1 导入 NumPy 库:
    • 4.2 创建一个 包含多个重复点的NumPy 数组
    • 4.3获取唯一值的索引:
    • 4.4 对索引进行排序:
    • 4.5 将数组展平:
    • 4.6 根据索引获取唯一值:
    • 4.7 打印删除所有重复值后的数组:
    • 4.8 全部代码:
  • 总结

在这里插入图片描述

引言:

在进行数据分析和机器学习任务时,经常会遇到数据中包含重复值的情况。处理这些重复值对于保证数据质量和模型性能至关重要。

本文将介绍如何利用 NumPy 库中的功能来删除重复点,包括基于行、列以及全部点的删除方法。

首先,我们将深入了解 NumPy 库中的 numpy.unique() 函数,该函数是处理数据中唯一值的利器,能够快速识别数组中的唯一值并返回相应的索引。

接下来,我们将分别介绍基于行、列和全部点的删除重复值的方法,并提供相应的代码示例和详细解释。

通过学习这些方法,您将能够灵活处理各种数据集中的重复值,为后续的数据分析和建模工作打下坚实的基础。

一 numpy.unique函数介绍

numpy.unique 函数用于在 NumPy 数组中查找唯一值,并返回唯一值数组。它有几个参数可以控制函数的行为,让我们来详细介绍一下这些参数以及 numpy.unique 的功能:

1.1 语法

numpy.unique(ar, return_index=False, 
return_inverse=False, return_counts=False, axis=None)

1.2 参数

ar:输入的数组,可以是任意维度的数组。

return_index:如果设置为True,则返回唯一值数组中的元素在原始数组中的索引,这样你可以通过这些索引获取原始数组中相应的元素。默认为 False。

return_inverse:如果设置为 True,则返回一个整数数组,该数组将原始数组中的每个元素替换为其在唯一值数组中的索引。通过使用此参数,您可以通过索引重构原始数组。默认为 False。

return_counts:如果设置为 True,则返回一个数组,其中包含唯一值数组中的每个元素在原始数组中出现的次数。默认为 False。

axis:指定在哪个轴上查找唯一值。默认为 None,表示将数组展平后查找唯一值。

1.3 返回值

unique_values:唯一值数组。

unique_indices:(可选)唯一值数组中的元素在原始数组中的索引。

unique_inverse:(可选)原始数组中的每个元素在唯一值数组中的索引,用于重构原始数组。

unique_counts:(可选)唯一值数组中的每个元素在原始数组中出现的次数。

1.4 示例

import numpy as np# 创建一个包含重复元素的数组
data = np.array([1, 2, 3, 1, 2, 4, 5, 6, 3])# 使用 unique 函数查找唯一值
unique_values = np.unique(data)print("唯一值数组:", unique_values)# 返回每个唯一值在原始数组中的索引
unique_indices = np.unique(data, return_index=True)[1]
print("唯一值在原始数组中的索引:", unique_indices)# 返回原始数组中的每个元素在唯一值数组中的索引
unique_inverse = np.unique(data, return_inverse=True)[1]
print("原始数组中的每个元素在唯一值数组中的索引:", unique_inverse)# 返回唯一值数组中的每个元素在原始数组中出现的次数
unique_counts = np.unique(data, return_counts=True)[1]
print("唯一值在原始数组中出现的次数:", unique_counts)

代码分析:

这段代码使用NumPy库对一个包含重复元素的数组进行处理。

首先,通过np.unique(data)获取数组中的唯一值,即去除重复值后的数组,并将结果存储在unique_values变量中。

然后,通过np.unique(data,return_index=True)[1]获取每个唯一值在原始数组中的索引,即每个唯一值在原始数组中第一次出现的位置,将结果存储在unique_indices变量中。

接着,通过np.unique(data, return_inverse=True)[1]获取原始数组中的每个元素在唯一值数组中的索引,即原始数组中的每个元素在唯一值数组中的位置,将结果存储在unique_inverse变量中。

最后,通过np.unique(data, return_counts=True)[1]获取唯一值数组中的每个元素在原始数组中出现的次数,将结果存储在unique_counts变量中。

打印这些变量可以提供关于数组中唯一值、其在原始数组中的索引、原始数组元素在唯一值数组中的索引以及唯一值在原始数组中出现次数的信息。

1.5 注意事项

如果需要删除数组中的重复值并保留其顺序,可以使用 return_index=True 和 return_inverse=True,然后根据返回的索引重构数组。

numpy.unique 函数默认会对输入数组进行排序,因此返回的唯一值数组也是排序好的。如果不想排序,可以在调用函数时指定 sort=False 参数。

二 基于行删除重复值

2.1 导入 Numpy 库:

import numpy as np

这行代码导入了 Numpy 库,使我们可以使用其中的函数和数据结构。

2.2 创建包含重复行的数组:

data = np.array([[7, 9, 8],[1, 3, 2],[1, 3, 2],[5, 6, 4]])

这段代码创建了一个多维 Numpy 数组 data,其中包含了一些重复的行。

2.3 使用 numpy.unique() 函数删除重复行后的数组以及唯一行在原始数组中的索引。:

data_row, indices = np.unique(data, axis=0, return_index=True)

在这行代码中,numpy.unique() 函数被调用。

axis=0 参数表示按行进行唯一性检查。

return_index=True 参数使函数返回唯一值的索引。

data_row 变量接收包含唯一行的数组,而 indices 变量接收了这些唯一行在原始数组中的索引。

2.4 对唯一值索引进行排序:

indices = np.sort(indices)

这行代码对唯一行的索引数组 indices 进行排序,为什么要进行排序呢?让我们先看看直接获取的删除重复行的数组。

print(data_row)

输出如下:

[[1 3 2][5 6 4][7 9 8]]

从输出结果中我们可以看到,虽然重复的行被删除了,但是数组原来的顺序被打乱了,变成了从小到大排序的顺序。

那么如何解决这个问题呢?我们先来看看 indices 变量,即唯一行在原始数组中的索引。

print(indices)

输出结果:

[1 3 0]

从输出结果中,我们可以看到,为[1 3 0],并不是唯一值在原来的数组中对应的索引值,这是因为索引值的排序是按照data_row数组中唯一值的索引值排序的,所以我们只需要将索引从小到大重新排序,然后利用获取的索引重构数组即可。

也可以这么理解,保留顺序后的数组应该是这样的:

 [[1 3 2][5 6 4][7 9 8]]

这个数组中唯一行在原始数组的索引是从小到大排序的,所以想要获取保留顺序的删除重复值的数组,我们需要对唯一值索引进行从小到大的排序,然后再重构。

2.5 根据排序后的索引获取唯一行:

unique_data = data[indices]

这行代码使用排序后的索引数组 indices 来获取删除了重复行的新数组 unique_data。

2.6 打印原始数组和删除重复行并保留顺序后的数组:

print("原数组:", data)
print("删除重复行后的数组:\n", unique_data)

这两行代码打印了原始数组 data 和删除了重复行并保留顺序后的数组 unique_data。

通过这些步骤,代码成功删除了数组中的重复行,并输出了删除重复行后的数组。

输出结果:

原数组: [[7 9 8][1 3 2][1 3 2][5 6 4]]
删除重复行后的数组:[[1 3 2][5 6 4][7 9 8]]

2.7 全部代码:

import numpy as npdata = np.array([[7, 9, 8],[1, 3, 2],[1, 3, 2],[5, 6, 4]])data_row,indices = np.unique(data, axis=0, return_index=True)indices = np.sort(indices)unique_data = data[indices]
print("原数组:",data)
print("删除重复行后的数组:\n", unique_data)

三 基于列删除重复值

要基于列删除数组中的重复值,可以利用 numpy.unique() 函数,并指定 axis=1 参数。以下是使用 numpy.unique() 函数基于列删除重复值的详细步骤:

3.1 导入 NumPy 库:

import numpy as np

这行代码导入了 NumPy 库并使用别名 np。

3.2 创建包含重复列的数组:

data = np.array([[7, 1, 1, 5],[9, 3, 3, 6],[8, 2, 2, 4]])

创建一个包含3行4列数据的 NumPy 重复列数组 data,第二列和第三列是重复的。

3.3 使用 np.unique() 函数获取唯一列索引:

indices = np.unique(data, axis=1, return_index=True)[1]

使用 np.unique() 函数查找每行中的唯一元素,axis=1 表示按列查找,return_index=True表示返回唯一值在原数组中的第一次出现的索引。indices 变量中。

3.4 对索引进行排序:

indices = np.sort(indices)

使用 NumPy 的 np.sort() 函数对索引数组进行排序,排序的原因在上面解释了,在这里就不解释了。

3.5 对数组进行转置:

data = data.T

对原始数组进行转置,将行变为列,列变为行。

这里为什么要进行转置呢?

为了方便后面的data[indices]语句可以依靠列索引进行重构数组,如果不转置,这条语句会默认将indices作为行索引重构数组,从而发生错乱。

3.6 选择唯一列:

unique_data = data[indices]

使用排序后的索引从转置后的数组中选择唯一的列。

3.7 再次对数组进行转置:

unique_data = unique_data.T

将选择的唯一列再次进行转置,使其恢复为原始的行列布局。

3.8 打印删除重复列并保留顺序后的数组:

print("删除重复列并保留顺序后的数组:\n", unique_data)

打印删除重复列并保留顺序后的数组 unique_data。

输出结果如下:

删除重复列并保留顺序后的数组:[[7 1 5][9 3 6][8 2 4]]

从结果中,我们可以看到,重复列被删除了,并且其他列之间保留了原来的排序关系。

3.9 全部代码:

import numpy as npdata = np.array([[7, 1, 1,5],[9, 3, 3,6],[8, 2, 2,4],])
data_row,indices = np.unique(data, axis=1, return_index=True)indices = np.sort(indices)data = data.Tunique_data = data[indices]
unique_data = unique_data.T
print("删除重复列并保留顺序后的数组:\n", unique_data)

四 基于全部点删除重复值

4.1 导入 NumPy 库:

import numpy as np

这行代码导入了 NumPy 库并使用别名 np。

4.2 创建一个 包含多个重复点的NumPy 数组

data = np.array([[8, 2, 9], [6, 7, 3], [1, 3, 4], [1, 5, 2]])

创建了一个包含4行3列数据的 NumPy 数组 data,这个数组具有多个重复点

4.3获取唯一值的索引:

indices = np.unique(data, return_index=True)[1]

使用 np.unique() 函数找到数组中的唯一值,并返回其在原数组中第一次出现的索引。return_index=True 表示返回索引。

4.4 对索引进行排序:

indices = np.sort(indices)

使用 NumPy 的 np.sort() 函数对索引数组进行排序。

4.5 将数组展平:

data = np.ravel(data)

使用 np.ravel() 函数将原始数组 data 展平为一维数组,因为indices中的索引是针对与一维数组的。

4.6 根据索引获取唯一值:

unique_data = data[indices]

使用排序后的索引从展平后的数组中选择唯一值。

4.7 打印删除所有重复值后的数组:

print("删除所有重复值后的数组:\n", unique_data)

打印删除所有重复值后的数组 unique_data。

输出结果如下:

删除所有重复值后的数组:[8 2 9 6 7 3 1 4 5]

从结果中,我们可以看到,所有重复值都被删除了,并且,新的数组保留了原来的顺序。

4.8 全部代码:

import numpy as npdata = np.array([ [8, 2, 9], [6, 7, 3], [1, 3, 4],[1, 5, 2] ])indices = np.unique(data,  return_index=True)[1]indices = np.sort(indices)data = np.ravel(data)unique_data = data[indices]print("删除所有重复值后的数组:\n",unique_data)

总结

数据清洗是数据处理过程中不可或缺的一环,而删除重复点则是其中的一个重要步骤。

本文通过介绍基于 NumPy 库的方法,向读者展示了如何高效地删除数据中的重复值,并保留重复值在原始数据中的顺序。

首先,我们学习了 numpy.unique() 函数的用法,了解了其语法、参数、返回值以及注意事项,为后续的操作打下基础。

接着,我们分别介绍了基于行、列和全部点的删除重复值的方法,通过代码示例演示了每种方法的实现步骤,并给出了详细的解释和说明。

通过本文的学习,读者将掌握利用 NumPy
库进行数据清洗的关键技能,能够在实际工作中灵活应用这些方法,提高数据处理的效率和准确性,为后续的数据分析和建模工作奠定坚实的基础。

这篇文章到这里就结束了

谢谢大家的阅读!

如果觉得这篇博客对你有用的话,别忘记三连哦。

我是豌豆射手^,让我们我们下次再见

在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/699500.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PostgreSQL索引篇 | BTree

B-Tree索引 (本文为《PostgreSQL数据库内核分析》一书的总结笔记,需要电子版的可私信我) B树特点: 非叶子节点含一个或多个关键字值和子节点指针,不指向实际数据的存储位置所有关键字都是叶子节点,每个叶…

Python运算符你学会了吗?

1.算术运算符 (加)、-(减)、*(乘)、/(除)、%(取余)、//(取整)、**(求幂) a 12 b 3 c 7print(a b) # 15 …

关于Kinect 互动沙盘 深度图 Shader Graph 分层

把Kinect的深度图穿给Shader Graph using com.rfilkov.kinect; using UnityEngine; using UnityEngine.UI; public class GetDepthTex : MonoBehaviour { public Material Mat_SandTable; void Update() { Mat_SandTable.SetTexture("_MainTex"…

【openGL教程08】关于着色器(02)

LearnOpenGL - Shaders 一、说明 着色器是openGL渲染的重要内容,客户如果想自我实现渲染灵活性,可以用着色器进行编程,这种程序小脚本被传送到GPU的显卡内部,起到动态灵活的着色作用。 二、着色器简述 正如“Hello Triangle”一章…

【寸铁的刷题笔记】树、dfs、bfs、回溯、递归(二)

【寸铁的刷题笔记】树、dfs、bfs、回溯、递归(二) 大家好 我是寸铁👊 金三银四,树、dfs、bfs、回溯、递归是必考的知识点✨ 快跟着寸铁刷起来!面试顺利上岸👋 喜欢的小伙伴可以点点关注 💝 上期回顾 感谢大家的支持&am…

[附完整代码]群智能算法跑21种真实世界优化问题,并输出结果到excel||群智能算法跑CEC 2020真实世界优化问题,并输出结果到excel

1、简介 灰狼算法跑跑21种真实世界优化问题|足球训练队优化算法跑21种真实世界优化问题||牛顿拉夫逊算法跑21种真实世界优化问题||冠状豪猪CPO跑21种真实世界优化问题。 ‘FTTA’,‘BWO’, ‘CPO’, ‘FHO’, ‘GWO’, ‘HHO’, ‘NRBO’,‘SCA’,‘SGA’,WOA’跑21种真实世…

Linux:ACL权限,特殊位和隐藏属性

目录 一.什么是ACL 二.操作步骤 ① 添加测试目录、用户、组,并将用户添加到组 ② 修改目录的所有者和所属组 ③ 设定权限 ④ 为临时用户分配权限 ⑤ 验证acl权限 ⑥ 控制组的acl权限 三. 删除ACL权限 一.什么是ACL 访问控制列表 (Access Control List):ACL 通…

笔记本Win 10系统查看电池健康状况

博主最近换了个笔记本电池,之前的电池容量明显变小了很多,而且出现了轻微鼓包的情况。所以用gpt问了一下怎么用系统的方法查看电池情况。 在Windows 10系统中,您可以通过以下步骤来查看笔记本电脑电池的健康状况: 打开命令提示符&…

CondaValueError: Malformed version string ‘~‘: invalid character(s)

使用conda 安装一些库时出现以下报错: CondaValueError: Malformed version string ~: invalid character(s)尝试进行更新conda conda upgrade -n base conda或者如果是环境方面的问题, conda upgrade -n base -c defaults --override-channels conda如…

记录 使用FFMPEG 笔记本摄像头推流

一、使用 FFMPEG 测试摄像头拉流显示 # 获取摄像头名称 ffmpeg -list_devices true -f dshow -i dummy# 我笔记本上的摄像头名称如下 device_pnp_\\?\usb#vid_0408&pid_1020&mi_00#6&199e90f7&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global# 使…

Vue2页面转化为Vue3

vue2element-ui转化为Vue3element plus 后台管理系统&#xff1a;增删查改 vue2页面&#xff1a; <template><div class"app-container"><div><el-form:model"queryParams"ref"queryForm"size"small":inline&qu…

golang tun设备创建并监听

golang tun设备创建并监听 linux tun设备文件地址为/dev/net/tun.直接打开即可(关闭文件描述符创建的tun虚拟接口自动注销) fd,err:syscall.Open("/dev/net/tun",syscall.O_RDWR,0640)//关闭 syscall.Close(fd)初始化 配置ip地址启动虚拟网卡 ip addr add xxx.xx…

命令绕过 [安洵杯 2019]easy_web1

打开题目 打开题目在URL处看到cmd&#xff0c;本能的直接用系统命令ls 发现被过滤了。又注意到imgTXpVek5UTTFNbVUzTURabE5qYz0似乎是一串base64 拿去base64解码 再hex解码一次得到555.png 再将其hex加密 base64加密 反向推出index.php的payload:?imgTmprMlJUWTBOalUzT0RK…

基于Redis限流(固定窗口、滑动窗口、漏桶、令牌桶)(肝货!!!)

近期redis复习的比较多&#xff0c;在限流这方面发现好像之前理解的限流算法有问题&#xff0c;索性花了一天“带薪摸鱼”时间肝了一天&#xff0c;有问题可以评论区探讨。 废话不多说&#xff0c;正片开始 目录 Maven固定窗口滑动窗口算法漏桶算法令牌桶算法 Maven 有些不用的…

快速排序法的名字由来,排序步骤是什么,最坏情况下的排序次数如何计算得来的呢?

问题描述&#xff1a; 快速排序法的名字由来&#xff0c;排序步骤是什么&#xff0c;最坏情况下的排序次数如何计算得来的呢&#xff1f; 问题解答&#xff1a; 快速排序法的名字来源于其排序速度快的特点。它是由英国计算机科学家 Tony Hoare 于1960年提出的&#xff0c;最…

板块一 Servlet编程:第六节 HttpSession对象全解 来自【汤米尼克的JAVAEE全套教程专栏】

板块一 Servlet编程&#xff1a;第六节 HttpSession对象全解 一、什么是HttpSessionSession的本质 二、创建Seesion及常用方法三、Session域对象四、Session对象的销毁 在上一节中&#xff0c;我们学习了Servlet五大对象里的第三个Cookie对象&#xff0c;但Cookie是有大小限制和…

Linux操作体系结构与功能流程

文章目录 前言一、linux操作系统结构二、操作系统的工作方式三、操作系统内核中各级模块的相互关联四、Linux操作系统结构的独立性 前言 以内核代码 v0.11 和 v3.4.2 版本源码对 Linux 内核相关知识进行学习&#xff0c;由浅入深逐步掌握 Linux 内核。本文记录 Linux 操作系统…

了解您的数据库管理系统及其优化器

PostgreSQL 模式 物品具有唯一标识符、唯一图像标识符、名称和价格。 仓库具有唯一标识符、名称以及由街道、城市和国家定义的位置。 对于每个可用的物品&#xff0c;我们记录每个仓库中的库存数量。如果某个物品在仓库中不可用&#xff0c;则这对没有记录。数量总是等于或大于…

[Angular 基础] - 自定义指令,深入学习 directive

[Angular 基础] - 自定义指令&#xff0c;深入学习 directive 这篇笔记的前置笔记为 [Angular 基础] - 指令(directives)&#xff0c;对 Angular 的 directives 不是很了解的可以先过一下这篇笔记 后面也会拓展一下项目&#xff0c;所以感兴趣的也可以补一下文后对应的项目&a…

排序和查找算法

一、排序算法 1.快速排序 不稳定&#xff0c;时间复杂度最理想 O(nlogn) 最差时间O(n^2) package com.test;public class fasf{/*** 快速排序* param args*/public static void main(String[]args){//不用设置大小int [] num{3,6,5,4,7,2,9};fasf fnew fasf();f.quicksort(n…