0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

重复值处理的常用方法

数据分析与开发 来源:Python数据科学 作者:Python数据科学 2022-03-16 13:55 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

本次来介绍重复值处理的常用方法。

重复值处理主要涉及两个部分,一个是找出重复值,第二个是删除重复值,也就是根据自己设定的条件进行删除操作。

定位重复值

对于重复值,我们首先需要查看这些重复值是什么样的形式,然后确定删除的范围,而查询重复值需要用到duplicated函数。

duplicated的返回值是布尔值,返回True和False,默认情况下会按照一行的所有内容进行查重。

主要参数:

subset:如果不按照全部内容查重,那么需要指定按照哪些列进行查重。比如按照姓名进行查重subset=['name'],那么具有相同名字的人就只会保留一个,但很可能只是重名的原因,而并非真正同一个人,所以可以按照姓名和出生日期两列查重,subset=['name','birthday'],同理还可以再添加列,这样就可以基本保证去重效果了。

keep:用来确定要标记的重复值,可以设置为first、last、False。

first:除第一次出现的重复值,其他都标记为True

last:除最后一次出现的重复值,其他都标记为True

False:所有重复值都标记为True

实例:

importpandasaspd
importnumpyasnp

data={
'user':['zszxz','zszxz','rose'],
'price':[100,200,-300],
'hobby':['reading','reading','hiking']
}
frame=pd.DataFrame(data)
print(frame)
------------------------
userpricehobby
0zszxz100reading
1zszxz200reading
2rose-300hiking
------------------------

frame.duplicated()
----------
0False
1False
2False
dtype:bool
-----------

上面提到duplicated返回布尔值,所以如果要想输出这些重复值,还需要和查询的方法配合使用df[df.duplicated()],比如:

#1、按user变量筛选重复值
frame[frame.duplicated(subset=['user'])]
-------------------
userpricehobby
1zszxz200reading
-------------------

上面按user一个变量进行查重,但没有设置keep参数,所以默认筛选出除了第一个以外的其它重复值。

#2、按user变量筛选重复值,保留全部重复值
frame[frame.duplicated(subset=['user'],keep=False)]
-------------------
userpricehobby
0zszxz100reading
1zszxz200reading
-------------------

上面按user一个变量进行查重,并设置keep参数为False,所以保留了全部的重复值。

#3、按user和hobby变量筛选重复值,筛选出除最后一个重复值以外的其它重复值
frame[frame.duplicated(subset=['user','hobby'],keep='last')]
-------------------
userpricehobby
0zszxz100reading
-------------------

上面按user和hobby两个变量进行查重,并设置keep参数为last,所以筛选出了除最后一个重复值以外的其它重复值。

通过两个参数的设置就可以查看自己想要的重复值了,以此判断要删除哪个,保留哪个。

删除重复值

当确定好需要删除的重复值后,就进行进行删除的操作了。

删除重复值会用到drop_duplicates函数。

和duplicated()函数参数类似,主要有3个参数:

subset:同duplicated(),设置去重的字段

keep: 这里稍有不同,duplicated()中是将除设置值以外重复值都返回True,而这里是保留的意思。同样可以设置first、last、False

first:保留第一次出现的重复行,删除其他重复行

last:保留最后一次出现的重复行,删除其他重复行

False:删除所有重复行

inplace:布尔值,默认为False,是否直接在原数据上删除重复项或删除重复项后返回副本。

实例:

1、全部去重

#按全部字段删除,在原数据frame上生效
frame.drop_duplicates(inplace=True)
print(frame)
------------------------
userpricehobby
0zszxz100reading
1zszxz200reading
2rose-300hiking
------------------------

因为上面数据中没有全部重复的,因此没有可删除行。

2、指定列去重

#按user字段删除,在原数据frame上生效
frame.drop_duplicates(subset=['user'],inplace=True)
print(frame)
------------------------
userpricehobby
0zszxz100reading
2rose-300hiking
------------------------

上面按user字段删除重复行,保留第一个重复行,因此第二行被删除了。但这里大家注意下,执行删除重复行操作后,表的索引也会被删掉。

如需要重置可以加上reset_index(),设置drop=True,用索引替代被打乱的索引。

frame.drop_duplicates(subset=['user'],inplace=True)
frame.reset_index(drop=True)
------------------------
userpricehobby
0zszxz100reading
1rose-300hiking
------------------------

keep默认为first,下面手动设置为last,只保留最后一个重复行。

#按全部字段删除,在原数据frame上生效
frame.drop_duplicates(subset=['user','hobby'],keep='last',inplace=True)
print(frame)
------------------------
userpricehobby
1zszxz200reading
2rose-300hiking
------------------------

keep手动设置为False,全部删除,这种一般很少用。

#按全部字段删除,在原数据frame上生效
frame.drop_duplicates(subset=['user','hobby'],keep=False,inplace=True)
print(frame)
------------------------
userpricehobby
2rose-300hiking
------------------------

以上就是重复值相关的所有操作。

注意事项

在删除重复值时,要注意下删除的逻辑。

因为很多时候我们需要把这些离线的清洗操作在线上复现。

如果我们随机地删除重复行,没有明确的逻辑,那么对于这种随机性线上是无法复现的,即无法保证清洗后的数据一致性。

所以我们在删除重复行前,可以把重复判断字段进行排序处理。

比如上面例子中,如果要对user和price去重,那么比较严谨的做法是按照user和price进行排序。

frame.sort_values(by=['user','price'],ascending=True).reset_index(drop=True)
--------------------
userpricehobby
0rose-300hiking
1zszxz100reading
2zszxz200reading
--------------------

因为有了排序性,只要按这个逻辑它的顺序是固定的,而不是随机的。所以无论我们设置keep为first还是last,都没有任何影响。

原文标题:pandas 重复数据处理大全(附代码)

文章出处:【微信公众号:数据分析与开发】欢迎添加关注!文章转载请注明出处。

审核编辑:彭菁

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据
    +关注

    关注

    8

    文章

    7314

    浏览量

    93940
  • 函数
    +关注

    关注

    3

    文章

    4406

    浏览量

    66812
  • KEEP
    +关注

    关注

    0

    文章

    8

    浏览量

    6920

原文标题:pandas 重复数据处理大全(附代码)

文章出处:【微信号:DBDevs,微信公众号:数据分析与开发】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    介绍几种常用的传感器数据处理方法

    在传感器使用中,我们常常需要对传感器数据进行各种整理,让应用获得更好的效果,以下介绍几种常用的简单处理方法
    发表于 07-12 10:51 1.1w次阅读

    使用jQuery的常用方法与返回分析

    使用jQuery的常用方法与返回分析 jQuery是一个轻量级的JavaScript库,旨在简化HTML文档遍历和操作、事件处理以及动画效果的创建。本文将介绍一些
    发表于 10-01 20:18

    Sql过滤重复数据处理方法

    对于常规的MySQL数据表中可能存在重复的数据,有些情况是允许重复数据的存在,有些情况是不允许的,这个时候我们就需要查找并删除这些重复数据,以下是具体的处理
    发表于 03-21 14:46

    常用的二方法有哪几种

    识别过程分别为哪几部分?常用的二方法有哪几种?
    发表于 10-15 09:01

    调试嵌入式处理常用方法有哪些?

    调试嵌入式处理常用方法有哪些?
    发表于 12-24 06:08

    调试嵌入式处理器的几种常用方法

    调试嵌入式处理器的几种常用方法 前言 在任何产品
    发表于 03-11 12:25 1832次阅读
    调试嵌入式<b class='flag-5'>处理</b>器的几种<b class='flag-5'>常用</b><b class='flag-5'>方法</b>

    常用的数字滤波方法

    平均值滤波就是对多个采样进行平均算法,这是消除随机误差最常用方法
    的头像 发表于 08-24 11:28 4.2w次阅读

    传感器数据常用的简单处理方法

    在传感器使用中,我们常常需要对传感器数据进行各种整理,让应用获得更好的效果,以下介绍几种常用的简单处理方法
    的头像 发表于 07-06 16:50 5001次阅读

    传感器使用中几种常用的简单处理方法

      在传感器使用中,我们常常需要对传感器数据进行各种整理,让应用获得更好的效果,以下介绍几种常用的简单处理方法
    的头像 发表于 11-30 10:40 1520次阅读

    浅谈传感器几种常用的简单处理方法

    在传感器使用中,我们常常需要对传感器数据进行各种整理,让应用获得更好的效果,以下介绍几种常用的简单处理方法
    发表于 03-02 09:35 929次阅读

    python处理重复方法

    处理重复是数据处理中常见的任务之一。在Python中,有几种有效的方法可以处理
    的头像 发表于 11-21 15:47 2162次阅读

    vlookup遇到重复,怎么匹配到第二个

    当使用VLOOKUP函数时,如果在查找范围中存在重复,则该函数只会返回第一个匹配的。然而,我们可以通过一些技巧来找到第二个匹配的。下面是一些
    的头像 发表于 12-01 10:47 4.6w次阅读

    vlookup怎么把第二个重复显示

    VLOOKUP是Excel中最常用的函数之一,它可以根据给定的在数据表中查找相应的信息。然而,当数据表中存在重复的查找时,VLOOKUP只能返回第一个匹配结果的数据。在本文中,我们
    的头像 发表于 12-03 10:24 5349次阅读

    gis中常用的空间分析方法

    GIS中常用的空间分析方法 GIS(地理信息系统)是一种用于收集、存储、处理、分析和展示地理数据的技术。空间分析是GIS的核心部分,它包括一系列方法和技术,用来研究地理空间数据之间的关
    的头像 发表于 02-25 13:44 8594次阅读

    eda中常用的数据处理方法

    奠定基础。 数据清洗 缺失处理 数据集中的缺失是常见的问题。处理缺失方法包括: 删除 :
    的头像 发表于 11-13 10:57 1362次阅读