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

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

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

  • 一 drop_duplicates() 介绍
  • 二 删除重复行
  • 三 指定删除重复点时的列
  • 四 保留第一个或最后一个出现的重复点
  • 五 原地修改DataFrame
  • 六 总结

引言

在机器学习领域,高质量的数据是构建强大模型的基石。而数据清洗作为数据预处理的关键步骤之一,对于确保数据质量至关重要。

本博客将重点介绍基于Pandas库的强大功能,特别是drop_duplicates()方法,来处理数据中的重复点。通过深入了解这一方法及其不同应用场景,读者将能够更有效地进行数据清洗,为机器学习任务打下坚实的基础。

在这里插入图片描述

一 drop_duplicates() 介绍

drop_duplicates() 方法是 Pandas 库中用于删除 DataFrame 中重复数据的方法。

它返回一个新的 DataFrame,其中不包含重复的行或列。

这个方法有几个重要的参数:

subset:指定要用来判断重复的列或列的组合。默认为 None,表示考虑整个 DataFrame 的所有列。

keep:指定保留重复值的方式。可以是 ‘first’(默认值,保留第一个出现的重复值)、‘last’(保留最后一个出现的重复值)或
False(删除所有重复值)。

inplace:指定是否在原 DataFrame 上直接进行修改,而不是返回一个新的 DataFrame。默认为 False。

在这里插入图片描述

二 删除重复行

Pandas提供了drop_duplicates()方法,可以用于删除DataFrame中的重复行。

这个方法会返回一个新的DataFrame,其中不包含重复的行。

示例:

import pandas as pd# 假设df是一个包含重复点的DataFrame
df = pd.DataFrame({'A': [1, 2, 2, 3, 3],'B': ['a', 'b', 'b', 'c', 'c']})# 使用drop_duplicates()方法删除重复行
df_unique = df.drop_duplicates()print(df_unique)

输出:

   A  B
0  1  a
1  2  b
3  3  c

在上面的例子中,原始DataFrame df 包含重复的行,经过drop_duplicates()方法处理后,返回了一个新的DataFrame df_unique,其中不包含重复的行。
在这里插入图片描述

三 指定删除重复点时的列

drop_duplicates()方法还可以接受subset参数,用于指定删除重复点时的列。

默认情况下,该方法会考虑所有的列,但你也可以通过subset参数指定特定的列进行重复点的判断。

示例

import pandas as pd# 创建一个包含重复点的DataFrame
# 注意列A中有重复值,但列B中的值是不同的
df = pd.DataFrame({'A': [1, 1, 2, 2, 3],'B': ['a', 'b', 'c', 'd', 'e']
})print("原始DataFrame:")
print(df)# 使用drop_duplicates()方法,并指定subset参数为列A
# 这意味着只会基于列A的值来判断和删除重复点
df_c = df.drop_duplicates(subset=['A'])print("\n基于列处理后的DataFrame:")
print(df_c)#使用drop_duplicates()方法,不指定subset参数为列A
df_r = df.drop_duplicates()
print("\n基于行处理后的DataFrame:")
print(df_r)

输出

原始DataFrame:A  B
0  1  a
1  1  b
2  2  c
3  2  d
4  3  e基于列处理后的DataFrame:A  B
0  1  a
2  2  c
4  3  e基于行处理后的DataFrame:A  B
0  1  a
1  1  b
2  2  c
3  2  d
4  3  e
​

代码分析:

以上代码首先创建了一个包含重复数据的 DataFrame,其中列 A 中有重复值,但列 B 中的值是不同的。

接着使用 drop_duplicates() 方法,并指定 subset 参数为列 A,这意味着只会基于列 A的值来判断和删除重复的数据点。

处理后的 DataFrame df_c 中只保留了列 A 中的唯一值,并保留了每个唯一值对应的第一个出现的行。

然后,代码使用 drop_duplicates() 方法没有指定 subset 参数,这意味着将考虑整个 DataFrame 的所有列进行去重。

因为B列全是不同的数据,故DataFrame 并没有发生变化。
在这里插入图片描述

四 保留第一个或最后一个出现的重复点

drop_duplicates()方法默认保留第一个出现的重复点,但你也可以通过keep参数指定保留最后一个出现的重复点,或者将所有重复点都删除。

示例

import pandas as pd# 创建一个包含重复点的DataFrame
df = pd.DataFrame({'A': [1, 1, 2, 2, 3, 3],'B': ['a', 'b', 'c', 'd', 'e', 'f']
})print("原始DataFrame:")
print(df)# 保留第一个出现的重复点
df_first = df.drop_duplicates(subset=['A'],keep='first')print("\n保留第一个出现的重复点处理后的DataFrame:")
print(df_first)# 保留最后一个出现的重复点
df_last = df.drop_duplicates(subset=['A'],keep='last')print("\n保留最后一个出现的重复点处理后的DataFrame:")
print(df_last)

运行结果:

原始DataFrame:A  B
0  1  a
1  1  b
2  2  c
3  2  d
4  3  e
5  3  f保留第一个出现的重复点处理后的DataFrame:A  B
0  1  a
2  2  c
4  3  e保留最后一个出现的重复点处理后的DataFrame:A  B
1  1  b
3  2  d
5  3  f

代码分析:

以上代码首先创建了一个包含重复数据的 DataFrame,其中列 A 中有重复值,但列 B 中的值是不同的,并且相同列A对应的B元素是不一样的。

接着,使用 drop_duplicates() 方法并指定 subset 参数为列 A,同时设置 keep 参数为 ‘first’,这意味着保留每个重复值中的第一个出现的数据点。

处理后的 DataFrame df_first 中只保留了列 A 中的唯一值,并保留了每个唯一值对应的第一个出现的行。

然后,再次使用 drop_duplicates() 方法指定 subset 参数为列 A,但这次设置 keep 参数为’last’,这意味着保留每个重复值中的最后一个出现的数据点。

处理后的 DataFrame df_last 中只保留了列 A 中的唯一值,并保留了每个唯一值对应的最后一个出现的行。

从代码结果可以看出,因为相同列A对应的B元素是不一样的,所以这两种方式删除重复点后的结果也是不一样

总体而言,这段代码演示了通过 drop_duplicates() 方法结合 subset 和 keep 参数来实现不同的去重策略,分别保留第一个和最后一个出现的重复点,从而得到两个不同的处理后的 DataFrame。

在这里插入图片描述

五 原地修改DataFrame

默认情况下,drop_duplicates()方法返回一个新的DataFrame,而不改变原始DataFrame。

但你也可以通过inplace参数将修改应用到原始DataFrame上。

示例

import pandas as pd# 创建一个包含重复数据的 DataFrame
data = {'A': [1, 1, 2, 2, 3],'B': ['a', 'b', 'c', 'c', 'd']
}
df = pd.DataFrame(data)# 显示原始 DataFrame
print("原始 DataFrame:")
print(df)# 删除重复点,并显示修改后的结果
df.drop_duplicates(inplace=True)
print("\n删除重复点后的 原始DataFrame:")
print(df)

运行结果:

原始 DataFrame:A  B
0  1  a
1  1  b
2  2  c
3  2  c
4  3  d删除重复点后的 原始DataFrame:A  B
0  1  a
1  1  b
2  2  c
4  3  d
​

在这个例子中,通过inplace=True参数,我们在原地修改了DataFrame,不再返回新的DataFrame,同时原始DataFrame也发生了改变,变为了删除重复值的样子。

将inplace参数改为False,我们会发现输出结果中,原始dataframe并没有发生改变,如:

import pandas as pd# 创建一个包含重复数据的 DataFrame
data = {'A': [1, 1, 2, 2, 3],'B': ['a', 'b', 'c', 'c', 'd']
}
df = pd.DataFrame(data)# 显示原始 DataFrame
print("原始 DataFrame:")
print(df)# 删除重复点,并显示修改后的结果
df.drop_duplicates(inplace=False)
print("\n删除重复点后的 原始DataFrame:")
print(df)

输出结果:

原始 DataFrame:A  B
0  1  a
1  1  b
2  2  c
3  2  c
4  3  d删除重复点后的 原始DataFrame:A  B
0  1  a
1  1  b
2  2  c
3  2  c
4  3  d

六 总结

在本博客中,我们深入探讨了机器学习中数据清洗的关键任务之一——删除重复点的方法,重点介绍了基于Pandas库的drop_duplicates()方法。

我们详细讨论了如何使用这一方法删除数据中的重复行,以及在多列情况下如何指定删除重复点的列,强调了方法的灵活性。

同时,我们解释了通过keep参数选择保留第一个或最后一个出现的重复点的策略,并提及了在处理大型数据集时需要注意的内存效率问题。

通过掌握这一技能,读者将能够更加轻松、灵活和高效地进行数据清洗,确保所使用的数据是准确、可靠且高质量的,为机器学习任务的成功打下坚实的基础。

在这里插入图片描述

这篇文章到这里就结束了

谢谢大家的阅读!

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

我是甜美的江,让我们我们下次再见

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

【全网首篇】Copyparty 路径遍历漏洞 CVE-2023-37474 漏洞分析

Copyparty是一个便携式文件服务器 Copyparty 路径遍历漏洞 CVE-2023-37474 漏洞分析,这个漏洞研究了一些时间,不过这个不难 漏洞复现分析环境 Copyparty测试版本:1.8.0和1.8.2 系统:Windows10 和 Linux 运行环境:…

Leetcode 283.移动零

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0]示例 2: 输入: nums [0] 输出: […

区块链革命:Web3如何改变我们的生活

随着技术的不断发展,区块链技术作为一种去中心化的分布式账本技术,正逐渐成为数字世界的核心。Web3作为区块链技术的重要组成部分,正在引领着数字化时代的变革,其影响已经开始渗透到我们生活的方方面面。本文将深入探讨区块链革命…

c# #if 与 Conditional属性宏的区别

测试代码 using System; using System.Diagnostics;namespace ConsoleApp1 {public class TestClass{[Conditional("Debug1")]public static void Func1(){Console.WriteLine("Conditional 宏");}public static void Func2(){ #if Debug2Console.WriteLin…

springboot当中使用EMQX(MQTT协议)

本篇博客主要围绕EMQX是什么?、能干什么?、怎么用? 三点来进行整理。 1、MQTT协议 1.1、MQTT简介 在了解EMQX前首先了解一下MQTT协议,MQTT 全称为 Message Queuing Telemetry Transport(消息队列遥测传输&#xff0…

智慧城市驿站:智慧公厕升级版,打造现代化城市生活的便捷配套

随着城市化进程的加速,人们对城市生活质量的要求也越来越高。作为智慧城市建设的一项重要组成部分,多功能城市智慧驿站应运而生。它集合了信息技术、设计美学、结构工艺、系统集成、环保节能等多个亮点,将现代科技与城市生活相融合&#xff0…

qt for python创建UI界面

现在很多库都有用到python,又想使用QT creater创作界面,来使用。 1.使用的版本 使用虚拟机安装Ubuntu22.04,Ubuntu使用命令行安装qt,默认安装的是QT5,不用来回调了,就用系统默认的吧,不然安装工具都要费不少事情。pyt…

SimpleDateFormat为什么是线程不安全的?

目录 在日常开发中,Date工具类使用频率相对较高,大家通常都会这样写:这很简单啊,有什么争议吗?格式化后出现的时间错乱。看看Java 8是如何解决时区问题的:在处理带时区的国际化时间问题,推荐使用…

[力扣 Hot100]Day30 两两交换链表中的节点

题目描述 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。 出处 思路 前两个结点先偷一手用交换val做,从链表第1…

算法面试八股文『 模型详解篇 』

说在前面 这是本系列的第二篇博客,主要是整理了一些经典模型的原理和结构,面试有时候也会问到这些模型的细节,因此都是需要十分熟悉的。光看原理还不够,最好是能用代码试着复现,可以看看李沐老师深度学习的教材&#…

沁恒CH32V30X学习笔记11---使用外部时钟模式2采集脉冲计数

使用外部时钟模式2采集脉冲计数 使用外部触发模式 2 能在外部时钟引脚输入的每一个上升沿或下降沿计数。将 ECE 位置位时,将使用外部时钟源模式 2。使用外部时钟源模式 2 时,ETRF 被选定为 CK_PSC。ETR 引脚经过可选的反相器(ETP),分频器(ETPS)后成为 ETRP,再经过滤波…

自动化上位机开发C#100例:如何用面向对象的方式封装雷赛运动控制卡EtherCAT总线卡(C#代码)

自动化上位机开发C#100例:雷赛运动控制卡EtherCAT总线卡C#封装类 文章目录 LTDMC.dll下载LTDMC.cs LTDMC.dll C#调用封装下载ICard.cs 运动控制卡接口Card.cs 运动控制卡抽象类CardLTDMC.cs 雷赛运动控制卡EtherCAT总线卡实现类CardList.cs 总线卡列表封装 LTDMC.dll下载 最新…

人工智能|机器学习——基于机器学习的舌苔检测

代码下载: 基于深度学习的舌苔检测毕设留档.zip资源-CSDN文库 1 研究背景 1.1.研究背景与意义 目前随着人们生活水平的不断提高,对于中医主张的理念越来越认可,对中医的需求也越来越多。在诊断中,中医通过观察人的舌头的舌质、苔…

基于STM32F407的coreJSON使用教程

目录 概述 工程建立 代码集成 函数介绍 使用示例 概述 coreJSON是FreeRTOS中的一个组件库,支持key查找的解析器,他只是一个解析器,不能生成json数据。同时严格执行 ECMA-404 JSON 标准。该库用 C 语言编写,设计符合 ISO C90…

基于Java SSM框架实现生鲜食品o2o商城系统项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架实现生鲜食品o2o商城系统演示 摘要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 生鲜食品o2o商城系统,主要的模块包括查看管理员;首页、个人中心、用户…

数学建模:BP神经网络(含python实现)

原理 BP 神经网络,也称为多层感知机(Multilayer Perceptron,MLP),是一种常见的神经网络模型,用于解决各种机器学习问题,包括分类和回归。BP 代表“反向传播”(Backpropagation&#…

领域驱动设计(Domain Driven Design)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、场景和要求二、领域模型关键词1.领域2.子域3.通用语言4.限界上下文5.领域模型6.实体和值对象7.聚合根8.领域服务9.领域事件 总结 前言 Domain Driven Desi…

备战蓝桥杯---动态规划(应用1)

话不多说,直接看题: 首先我们考虑暴力,用二维前缀和即可,复杂度为o(n^4). 其实,我们不妨枚举任意2行,枚举以这个为边界的最大矩阵。 我们把其中的每一列前缀和维护出来,相当于把一个矩阵压缩成…

1902_野火FreeRTOS教程内核在STM32中用到的2个中断PENDSV和SYSTICK

1902_野火FreeRTOS教程内核在STM32中用到的2个中断PENDSV和SYSTICK 全部学习汇总: g_FreeRTOS: FreeRTOS学习笔记 (gitee.com) 上面是涉及到的源代码,而这次需要分析的就是78、79行的两个中断。首先,需要确认NVIC_SYSPRI2寄存器的作用。 进一…

PostgreSQL使用session_exec和file_fdw实现失败次数锁定用户策略

使用session_exec 、file_fdw以及自定义函数实现该功能。 缺陷:实测发现锁用户后,进去解锁特定用户。只能允许一次登陆,应该再次登陆的时候,触发函数,把之前的日志里的错误登陆的信息也计算到登录次数里了。而且foreig…