“去重”通过字面意思不难理解,就是删除重复的数据。在一个数据集中,找出重复的数据删并将其删除,最终只保存一个唯一存在的数据项,这就是数据去重的整个过程。删除重复数据是数据分析中经常会遇到的一个问题。通过数据去重,不仅可以节省内存空间,提高写入性能,还可以提升数据集的精确度,使得数据集不受重复数据的影响。

Panda DataFrame 对象提供了一个数据去重的函数 drop_duplicates(),本节对该函数的用法做详细介绍。

函数格式

drop_duplicates()函数的语法格式如下:

df.drop_duplicates(subset=['A','B','C'],keep='first',inplace=True)

参数说明如下:

  • subset:表示要进去重的列名,默认为 None。
  • keep:有三个可选参数,分别是 first、last、False,默认为 first,表示只保留第一次出现的重复项,删除其余重复项,last 表示只保留最后一次出现的重复项,False 则表示删除所有重复项。
  • inplace:布尔值参数,默认为 False 表示删除重复项后返回一个副本,若为 Ture 则表示直接在原数据上删除重复项。

实际应用

首先创建一个包含有重复值的 DataFrame 对象,如下所示:

  1. import pandas as pd
  2. data={
  3. 'A':[1,0,1,1],
  4. 'B':[0,2,5,0],
  5. 'C':[4,0,4,4],
  6. 'D':[1,0,1,1]
  7. }
  8. df=pd.DataFrame(data=data)
  9. print(df)

输出结果:

  A B C D
0 1 0 4 1
1 0 2 0 0
2 1 5 4 1
3 1 0 4 1

1) 默认保留第一次出现的重复项

import pandas as pd
data={ 'A':[1,0,1,1],
'B':[0,2,5,0],
'C':[4,0,4,4],
'D':[1,0,1,1]
}
df=pd.DataFrame(data=data)
#默认保留第一次出现的重复项
df.drop_duplicates()

输出结果:

  A B C D
0 1 0 4 1
1 0 2 0 0
2 1 5 4 1

2) keep=False删除所有重复项

  1. import pandas as pd
  2. data={
  3. 'A':[1,0,1,1],
  4. 'B':[0,2,5,0],
  5. 'C':[4,0,4,4],
  6. 'D':[1,0,1,1]
  7. }
  8. df=pd.DataFrame(data=data)
  9. #默认保留第一次出现的重复项
  10. df.drop_duplicates(keep=False)

输出结果:

  A B C D
1 0 2 0 0
2 1 5 4 1

3) 根据指定列标签去重

  1. import pandas as pd
  2. data={
  3. 'A':[1,3,3,3],
  4. 'B':[0,1,2,0],
  5. 'C':[4,5,4,4],
  6. 'D':[3,3,3,3]
  7. }
  8. df=pd.DataFrame(data=data)
  9. #去除所有重复项,对于B列来说两个0是重复项
  10. df.drop_duplicates(subset=['B'],keep=False)
  11. #简写,省去subset参数
  12. #df.drop_duplicates(['B'],keep=False)
  13. print(df)

输出结果:

  A B C D
1 3 1 5 3
2 3 2 4 3

从上述示例可以看出,删除重复项后,行标签使用的数字是原来的,并没有从 0 重新开始,那么我们应该怎么从 0 重置索引呢?Pandas 提供的 reset_index() 函数会直接使用重置后的索引。如下所示:

import pandas as pd

data={

    'A':[1,3,3,3],
'B':[0,1,2,0],
'C':[4,5,4,4],
'D':[3,3,3,3]
}
df=pd.DataFrame(data=data)
#去除所有重复项,对于B来说两个0是重复项
df=df.drop_duplicates(subset=['B'],keep=False)
#重置索引,从0重新开始
df.reset_index(drop=True)

输出结果:

  A B C D
0 3 1 5 3
1 3 2 4 3

4) 指定多列同时去重

创建一个 DataFrame 对象,如下所示:

  1. import numpy as np
  2. import pandas as pd
  3. df = pd.DataFrame({'Country ID':[1,1,2,12,34,23,45,34,23,12,2,3,4,1],
  4. 'Age':[12,12,15,18, 19, 25, 21, 25, 25, 18, 25,12,32,18],
  5. 'Group ID':['a','z','c','a','b','s','d','a','b','s','a','d','a','f']})
  6. #last只保留最后一个重复项
  7. df.drop_duplicates(['Age','Group ID'],keep='last')

输出结果:

  Country ID Age Group ID
0 1 12 a
1 1 12 z
2 2 15 c
3 3 18 a
4 4 19 b
5 3 25 s
6 4 21 d
8 2 25 b
9 1 18 s
10 2 25 a
11 3 12 d
12 4 32 a
13 1 18 f

上述数据集中,第 7 行、第 10 行对应的列标签数据相同,我们使用参数值“last”保留最后一个重复项,也就是第 10 行数据。

关注微信公众号「站长严长生」,在手机上阅读所有教程,随时随地都能学习。本公众号由C语言中文网站长运营,每日更新,坚持原创,敢说真话,凡事有态度。

pandas之去重的更多相关文章

  1. Pandas数据去重和对重复数据分类、求和,得到未重复和重复(求和后)的数据

    人的理想志向往往和他的能力成正比. —— 约翰逊 其实整个需求呢,就是题目.2018-08-16 需求的结构图: 涉及的包有:pandas.numpy 1.导入包: import pandas as ...

  2. pandas DF去重

    实例 import pandas as pd data=pd.DataFrame({'产品':['A','A','A','A'],'数量':[50,50,30,30]}) 去重 data.drop_d ...

  3. pandas常用操作详解——pandas的去重操作df.duplicated()与df.drop_duplicates()

    df.duplicated() 参数详解: subset:检测重复的数据范围.默认为数据集的所有列,可指定特定数据列: keep: 标记哪个重复数据,默认为'first'.1.'first':标记重复 ...

  4. python 去重方法

    待补充:https://www.cnblogs.com/zknublx/p/6042295.html 一.使用集合直接去重 ids = [1,4,3,3,4,2,3,4,5,6,1]ids = lis ...

  5. 学习笔记之Python全栈开发/人工智能公开课_腾讯课堂

    Python全栈开发/人工智能公开课_腾讯课堂 https://ke.qq.com/course/190378 https://github.com/haoran119/ke.qq.com.pytho ...

  6. 我的Python分析成长之路11

    数据预处理 如何对数据进行预处理,提高数据质量,是数据分析中重要的问题. 1.数据合并 堆叠合并数据,堆叠就是简单地把两个表拼在一起,也被称为轴向链接,绑定或连接.依照轴的方向,数据堆叠可分为横向堆叠 ...

  7. 04. Pandas 3| 数值计算与统计、合并连接去重分组透视表文件读取

    1.数值计算和统计基础 常用数学.统计方法 数值计算和统计基础 基本参数:axis.skipna df.mean(axis=1,skipna=False)  -->> axis=1是按行来 ...

  8. Pandas Dataframe增、删、改、查、去重、抽样基本操作

    总括 pandas的索引函数主要有三种: loc 标签索引,行和列的名称 iloc 整型索引(绝对位置索引),绝对意义上的几行几列,起始索引为0 ix 是 iloc 和 loc的合体 at是loc的快 ...

  9. pandas的合并、连接、去重、替换

    import pandas as pd import numpy as np # merge合并 ,类似于Excel中的vlookup df1 = pd.DataFrame({'key': ['K0' ...

  10. pandas dataframe重复数据查看.判断.去重

    本文详解如何使用pandas查看dataframe的重复数据,判断是否重复,以及如何去重 dataframe数据样本: import pandas as pd df = pd.DataFrame({' ...

随机推荐

  1. Bugku Log4j2 漏洞题目 解题参考

    Log4j2 漏洞题目 题目地址 https://ctf.bugku.com/challenges/detail/id/340.html?page=1 二.攻击环境准备 需要一台linux云服务器,把 ...

  2. C语言初级阶段7——指针1

    C语言初级阶段7--指针1 地址与指针 1.地址:数据在内存中的存储位置编号,是一个常量. 2.指针:指针的本质就是地址. 指针变量的定义和声明 1.指针变量:存储的数据是地址. 2.定义方法:类型* ...

  3. SpringBoot - Lombok使用详解1(基本介绍、安装配置、var和val)

    我们创建 POJO 类时,经常需要先写属性,然后手写或者自动生成 get 和 set 方法,然后还要重写 toString 方法....一系列操作下来,这个 POJO 类便会产生太多的样板式代码. 这 ...

  4. Linux 配置nginx 代理tomcat,配置ssl

    我就直接干活不废话: 配置文件nginx, nginx.conf #user nobody;worker_processes 1; #error_log logs/error.log;#error_l ...

  5. heimaJava-网络编程

    Java 网络编程 概念 网络编程可以让程序与网络上的其他设备中的程序进行数据交互 网络通信基本模式 常见的通信模式有如下两种形式,Client-Server(CS),Browser/Server(B ...

  6. 复杂数据类型(signal)的解读-C语言基础

    这一篇文章要探讨的是C语言中复杂数据类型的解读.涉及到signal()函数数据类型的解读(并不解释signal()的作用)以及对于数据类型的理解,属于C语言基础篇. 在开始解读signal()这种复杂 ...

  7. JQUERY选择器大全(转载)

    在Web应用程序中,大部分的客户端操作都是基于对象的操作,要操作对象就必须先获取对象,jQuery提供了强大的选择器让我们获取对象.我人为地将jQuery选择器分为两大部分:选择对象和筛选条件.选择对 ...

  8. Kong网关安装自定义插件

    安装自定义插件需要注意kong网关的版本要求!! 下面以安装Skywalking插件为例,要求Kong网关是2.2及以上版本,https://github.com/apache/skywalking- ...

  9. P5192 有源汇上下界最大流总结

    之前听学长讲解时,只听了大体思路就跑路了,没有听到具体细节.后面在考虑出度多的点具体向虚拟源点连边还是虚拟汇点连边时,只凭直觉直接向源点连边,然后就一直WA,直到后来中午听同学讲解才反应过来,白白浪费 ...

  10. Rancher 通过主机标签进行调度

    https://blog.csdn.net/qq12547345/article/details/121486709