Pandas 重复数据处理大全
作者 | 东哥起飞
来源 | Python数据科学
本次来介绍重复值处理的常用方法。
重复值处理主要涉及两个部分,一个是找出重复值,第二个是删除重复值,也就是根据自己设定的条件进行删除操作。
定位重复值
对于重复值,我们首先需要查看这些重复值是什么样的形式,然后确定删除的范围,而查询重复值需要用到duplicated
函数。
duplicated
的返回值是布尔值,返回True
和False
,默认情况下会按照一行的所有内容进行查重。
主要参数:
subset
:如果不按照全部内容查重,那么需要指定按照哪些列进行查重。比如按照姓名进行查重subset=['name']
,那么具有相同名字的人就只会保留一个,但很可能只是重名的原因,而并非真正同一个人,所以可以按照姓名和出生日期两列查重,subset=['name','birthday']
,同理还可以再添加列,这样就可以基本保证去重效果了。keep
:用来确定要标记的重复值,可以设置为first
、last
、False
。first
:除第一次出现的重复值,其他都标记为Truelast
:除最后一次出现的重复值,其他都标记为TrueFalse
:所有重复值都标记为True
实例:
import pandas as pd
import numpy as npdata = {'user' : ['zszxz','zszxz','rose'],'price' : [100, 200, -300],'hobby' : ['reading','reading','hiking']
}
frame = pd.DataFrame(data)
print(frame)
------------------------user price hobby
0 zszxz 100 reading
1 zszxz 200 reading
2 rose -300 hiking
------------------------frame.duplicated()
----------
0 False
1 False
2 False
dtype: bool
-----------
上面提到duplicated
返回布尔值,所以如果要想输出这些重复值,还需要和查询的方法配合使用df[df.duplicated()]
,比如:
# 1、按user变量筛选重复值
frame[frame.duplicated(subset=['user'])]
-------------------user price hobby
1 zszxz 200 reading
-------------------
上面按user
一个变量进行查重,但没有设置keep
参数,所以默认筛选出除了第一个以外的其它重复值。
# 2、按user变量筛选重复值,保留全部重复值
frame[frame.duplicated(subset=['user'], keep=False)]
-------------------user price hobby
0 zszxz 100 reading
1 zszxz 200 reading
-------------------
上面按user
一个变量进行查重,并设置keep
参数为False
,所以保留了全部的重复值。
# 3、按user和hobby变量筛选重复值,筛选出除最后一个重复值以外的其它重复值
frame[frame.duplicated(subset=['user','hobby'], keep='last')]
-------------------user price hobby
0 zszxz 100 reading
-------------------
上面按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)
------------------------user price hobby
0 zszxz 100 reading
1 zszxz 200 reading
2 rose -300 hiking
------------------------
因为上面数据中没有全部重复的,因此没有可删除行。
2、指定列去重
# 按user字段删除,在原数据frame上生效
frame.drop_duplicates(subset=['user'],inplace=True)
print(frame)
------------------------user price hobby
0 zszxz 100 reading
2 rose -300 hiking
------------------------
上面按user
字段删除重复行,保留第一个重复行,因此第二行被删除了。但这里大家注意下,执行删除重复行操作后,表的索引也会被删掉。
如需要重置可以加上reset_index()
,设置drop=True
,用索引替代被打乱的索引。
frame.drop_duplicates(subset=['user'],inplace=True)
frame.reset_index(drop=True)
------------------------user price hobby
0 zszxz 100 reading
1 rose -300 hiking
------------------------
keep
默认为first
,下面手动设置为last
,只保留最后一个重复行。
# 按全部字段删除,在原数据frame上生效
frame.drop_duplicates(subset=['user','hobby'],keep='last',inplace=True)
print(frame)
------------------------user price hobby
1 zszxz 200 reading
2 rose -300 hiking
------------------------
keep
手动设置为False
,全部删除,这种一般很少用。
# 按全部字段删除,在原数据frame上生效
frame.drop_duplicates(subset=['user','hobby'],keep=False,inplace=True)
print(frame)
------------------------user price hobby
2 rose -300 hiking
------------------------
以上就是重复值相关的所有操作。
注意事项
在删除重复值时,要注意下删除的逻辑。
因为很多时候我们需要把这些离线的清洗操作在线上复现。
如果我们随机地删除重复行,没有明确的逻辑,那么对于这种随机性线上是无法复现的,即无法保证清洗后的数据一致性。
所以我们在删除重复行前,可以把重复判断字段进行排序处理。
比如上面例子中,如果要对user
和price
去重,那么比较严谨的做法是按照user
和price
进行排序。
frame.sort_values(by=['user','price'],ascending=True).reset_index(drop=True)
--------------------user price hobby
0 rose -300 hiking
1 zszxz 100 reading
2 zszxz 200 reading
--------------------
因为有了排序性,只要按这个逻辑它的顺序是固定的,而不是随机的。所以无论我们设置keep
为first
还是last
,都没有任何影响。
往
期
回
顾
资讯
Meta开发AI语音助手,助力元宇宙
资讯
Python:Bug官网不要了,全迁
技术
用Python制作可视化报表,太快了
资讯
M2芯片终于要来了?全线换新
分享
点收藏
点点赞
点在看
Pandas 重复数据处理大全相关推荐
- 【Python】pandas 重复数据处理大全(附代码)
所有数据和代码可在GitHub获取: https://github.com/xiaoyusmd/PythonDataScience 本次来介绍重复值处理的常用方法. 重复值处理主要涉及两个部分,一个是 ...
- 【Python】pandas 分类数据处理大全(附代码)
所有数据和代码可在GitHub获取: https://github.com/xiaoyusmd/PythonDataScience category是pandas的一种分类的定类数据类型.和文本数据. ...
- 【Python】pandas 缺失数据处理大全(附代码)
之前一直在分享pandas的一些骚操作:pandas骚操作,根据大家反映还不错,但是很多技巧都混在了一起,没有细致的分类,这样不利于查找,也不成体系. 利用闲暇之余将有关数据清洗.数据分析的一些技能再 ...
- pandas 分类数据处理大全
作者 | 东哥起飞 来源 | Python数据科学 继续更新pandas数据清洗~ category是pandas的一种分类的定类数据类型.和文本数据.str.<methond>一样,它也 ...
- Python 数据分析三剑客之 Pandas(八):数据重塑、重复数据处理与数据替换
CSDN 课程推荐:<迈向数据科学家:带你玩转Python数据分析>,讲师齐伟,苏州研途教育科技有限公司CTO,苏州大学应用统计专业硕士生指导委员会委员:已出版<跟老齐学Python ...
- pandas基础操作大全之数据合并
在pandas 基础操作大全之数据读取&清洗&分析中介绍了pandas常见的数据处理操作,现在继续对pandas常用的数据合并操作做下介绍,便于大家快速了解,也方便后续需要时快速查询. ...
- 数据分析——使用pandas进行数据处理
使用pandas进行数据处理 概念介绍 pandas模块介绍 Series和DataFrame Series简介 DataFrame简介 DataFrame的常用属性方法 创建DataFrame Da ...
- 数据库,唯一索引,重复数据处理
为什么80%的码农都做不了架构师?>>> //唯一索引,重复数据处理 1.为母表建立唯一主键(主键为自增,此字段在后面删除记录时会用到),同时 建立和母表一样的临时表(此表要建 ...
- python 取反_自从用了这招pandas 空数据处理方法,python编程速度提升了不少
今天为大家带来的内容是:自从用了这招pandas 空数据处理方法,python编程速度提升了不少 文章内容主要介绍了pandas 空数据处理方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工 ...
最新文章
- 把度分秒的经纬度转换成十进制的经纬度的工具类
- 指数型组织形成的 9 大驱动因素
- java基础(一)-面向对象思想
- tecplot对数坐标轴怎么画_一次更换双速风机接线经历,想通了改变磁极对数原理...
- mongo java aggregate_java使用spring + mongo进行Aggregation聚合查询
- 20200327:最大矩形(leetcode85)
- JMP M16:64
- 日程表、学生课表插件
- jrtplib 打包做了哪些事_使用jrtplib打包发送h264数据,关使用vlc|mplayer播放 | 学步园...
- [Everyday Mathematic]20150217
- javamail 超时_为什么JavaMail连接超时过长
- 马云在大学学计算机,大佬高考往事 马云数学考一分刘强东错选专业
- HashMap源码解析JDK1.8 —————— 开开开山怪
- win10添加打印机失败,无法正常使用打印机的解决办法
- 微信小程序之点击图片滑动到相应内容
- 基于Linux用C语言实现TCP半双工通信和UDP半双工通信
- 查询数据库空间(mysql和oracle)
- Adnroid ViewPage 使用
- 航班信息查询和检索系统
- 批量替换文本中的多组字符串