Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【Python】基于某些列删除数据框中的重复值

【Python】基于某些列删除数据框中的重复值

作者头像
阿黎逸阳
发布于 2020-09-08 08:36:46
发布于 2020-09-08 08:36:46
21.8K00
代码可运行
举报
运行总次数:0
代码可运行

Python按照某些列去重,可用drop_duplicates函数轻松处理。本文致力用简洁的语言介绍该函数。

本文目录

  1. drop_duplicates函数介绍
  2. 加载数据
  3. 按照某一列去重实例 3.1 按照某一列去重(参数为默认值) 3.2 按照某一列去重(改变keep值) 3.3 按照某一列去重(inplace=True)
  4. 按照多列去重实例

一、drop_duplicates函数介绍

drop_duplicates函数可以按某列去重,也可以按多列去重。具体语法如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
DataFrame.drop_duplicates(subset=None,keep='first',inplace=False)

代码解析:

DataFrame:待去重的数据框

subset:用来指定特定的列,根据指定的列对数据框去重。默认值为None,即DataFrame中一行元素全部相同时才去除。

keep:对重复值的处理方式,可选{'first', 'last', 'False'}。默认值first,即保留重复数据第一条。若选last为保留重复数据的最后一条,若选False则删除全部重复数据。

inplace:是否在原数据集上操作。默认值False,即把原数据copy一份,在copy数据上删除重复值,并返回新数据框(原数据框不改变)。值为True时直接在原数据视图上删重,没有返回值。

二、加载数据

加载有重复值的数据,并展示数据。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# coding: utf-8
import os             #导入设置路径的库
import pandas as pd  #导入数据处理的库
import numpy as np   #导入数据处理的库

os.chdir('F:/微信公众号/Python/26.基于多列组合删除数据框中的重复值')  #把路径改为数据存放的路径
name = pd.read_csv('name.csv',sep=',',encoding='gb18030')
name

得到结果:

注:后文所有的数据操作都是在原始数据集name上进行。

三、按照某一列去重

1 按照某一列去重(参数为默认值)

按照name1对数据框去重。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
new_name_1 = name.drop_duplicates(subset='name1')
new_name_1

得到结果:

从结果知,参数为默认值时,是在原数据的copy上删除数据,保留重复数据第一条并返回新数据框

感兴趣的可以打印name数据框,删重操作不影响name的值。

2 按照某一列去重(改变keep值)

2.1 实例一(keep='last')

按照name1对数据框去重,并设置keep='last'。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
new_name_1 = name.drop_duplicates(subset='name1',keep='last')
new_name_1

得到结果:

从结果知,参数keep='last',是在原数据的copy上删除数据,保留重复数据最后一条并返回新数据框,不影响原始数据框name。

2.2 实例二(keep=False)

按照name1对数据框去重,并设置keep=False。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
new_name_2 = name.drop_duplicates(subset='name1',keep=False)
new_name_2

得到结果:

从结果知,参数keep=False,是把原数据copy一份,在copy数据框中删除全部重复数据,并返回新数据框,不影响原始数据框name。

3 按照某一列去重(inplace=True)

按照name1去重,并设置inplace=True

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
new_name_3 = name.drop_duplicates(subset='name1',inplace=True)
new_name_3

结果中new_name_3的值为空,即设置inplace=True时没有返回结果,是在原始数据框name上直接进行操作。打印name可得结果:

结果和按照某一列去重(参数为默认值)是一样的。

如果想保留原始数据框直接用默认值即可,如果想直接在原始数据框删重可设置参数inplace=True

四、按照多列去重

对多列去重和一列去重类似,只是原来根据一列是否重复删重。现在要根据指定的列判断是否存在重复(顺序也要一致才算重复)删重。

接下来看一个实例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
new_name = name.drop_duplicates(subset=['name1','relation'])
new_name

得到结果:

原始数据中只有第二行和最后一行存在重复,默认保留第一条,故删除最后一条得到新数据框。

想要根据更多列数去重,可以在subset中添加列。如果不写subset参数,默认值为None,即DataFrame中一行元素全部相同时才去除。

从上文可以发现,在Python中用drop_duplicates函数可以轻松地对数据框进行去重。

但是对于两列中元素顺序相反的数据框去重,drop_duplicates函数无能为力。

如需处理这种类型的数据去重问题,参见本公众号中的文章【Python】基于多列组合删除数据框中的重复值

-end-

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-05-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 阿黎逸阳的代码 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
从源码剖析Go语言基于信号抢占式调度
在 Go 的 1.14 版本之前抢占试调度都是基于协作的,需要自己主动的让出执行,但是这样是无法处理一些无法被抢占的边缘情况。例如:for 循环或者垃圾回收长时间占用线程,这些问题中的一部分直到 1.14 才被基于信号的抢占式调度解决。
luozhiyun
2021/03/29
1.2K0
GoLang协程Goroutiney原理与GMP模型详解
Goroutine是Go语言中的一种轻量级线程,也成为协程,由Go运行时管理。它是Go语言并发编程的核心概念之一。Goroutine的设计使得在Go中实现并发编程变得非常简单和高效。
张飞的猪
2024/11/09
1120
GoLang协程Goroutiney原理与GMP模型详解
Golang/Go goroutine调度器原理/实现
Go语言在2016年再次拿下TIBOE年度编程语言称号,这充分证明了Go语言这几年在全世界范围内的受欢迎程度。如果要对世界范围内的gopher发起一次“你究竟喜欢Go的哪一点”的调查,我相信很多Gopher会提到:goroutine。
sunsky
2020/08/20
1.1K0
Golang 语言的 goroutine 调度器模型 GPM
Golang 语言与其他编程语言之间比较,最大的亮点就是 goroutine,使 Golang 语言天生支持并发,可以高效使用 CPU 的多个核心,而并发执行需要一个调度器来协调。
frank.
2021/01/22
1.3K0
golang 重要知识:golang 调度
Go 的调度机制相当于我们微服务里的基础组件。很多运行时操作都涉及到了调度的关联。本文会细聊调度概念,策略,以及它的机制。当然,也少不了最常提及的 GMP 模型。
lincoln
2021/07/30
1.1K1
Go 运行时面试题
在 Go 语言中,goroutine 是一种非常轻量级的执行线程。goroutine 是 Go 语言并发模型的核心,允许同时执行多个函数调用。goroutines 在 Go 运行时环境中被多路复用到少量的操作系统(OS)线程上,以实现高效并发。
Lemon黄
2023/12/13
4000
Go 运行时面试题
Golang 协程 与 Java 线程池的联系
如何理解Golang的协程,我觉得可以用一句话概括: Golang 提供的协程是一种支持任务分时复用的高级线程池实现。
大忽悠爱学习
2023/10/19
4260
Golang 协程 与 Java 线程池的联系
Go调度器系列(2)宏观看调度器
上一篇文章《Go语言高阶:调度器系列(1)起源》,学goroutine调度器之前的一些背景知识,这篇文章则是为了对调度器有个宏观的认识,从宏观的3个角度,去看待和理解调度器是什么样子的,但仍然不涉及具体的调度原理。
大彬
2019/04/11
6490
Go调度器系列(2)宏观看调度器
如何定位 golang 进程 hang 死的 bug
之前在 golang 群里有人问过为什么程序会莫名其妙的 hang 死然后不再响应任何请求。单核 cpu 打满。
sunsky
2020/08/20
2K0
Go 调度器 M, P 和 G
网上已经有很多关于Go调度器的文章了,多看一些,可以加深记忆,也可以对比查看文章中是否有不准确的地方,更全面的了解Go的调度器。
公众号-利志分享
2022/04/25
2360
Go 调度器 M, P 和 G
Go 1.14 正式发布,重要更新有哪些
Go 在 2019 年发布了Go 1.12与Go 1.13。Go 1.13 的大部分变化在于工具链、运行时和库的实现。时隔半年,Go 1.14 正式发布。
aoho求索
2020/03/18
1.2K0
Go 1.14 正式发布,重要更新有哪些
深度解密Go语言之scheduler
一个月前,《Go 语言高级编程》作者柴树杉老师在 CSDN 上发表了一篇《Go 语言十年而立,Go2 蓄势待发》,视角十分宏大。我们既要低头看路,有时也要抬头看天,这篇文章就属于“抬头”看天类的,推荐阅读。
梦醒人间
2019/09/04
1.1K0
深度解密Go语言之scheduler
了解go在协程调度上的改进
协作式调度是指以多个任务之间以协作的方式切换执行,每个任务执行一会,任务执行到某个点时会自己让出当前资源交给其他正在等待的任务,这显得比较主动和自愿。
秋名山白又白
2022/01/23
1.4K0
了解go在协程调度上的改进
Go 协作与抢占
我们在分析调度循环[1]的时候总结过一个问题:如果某个 G 执行时间过长,其他的 G 如何才能被正常地调度?这便涉及到有关调度的两个理念:协作式调度与抢占式调度。
梦醒人间
2020/04/26
2.2K0
深入浅出Go调度器中的GMP模型
今天给大家介绍一下Go协程调度器的G-M-P的模型,以及一个线程在该模型下是如何被调度的。
Go学堂
2023/08/28
1.1K0
深入浅出Go调度器中的GMP模型
浅谈:Golang 并发
在面向进程设计的系统中,进程(process)是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。 进程是程序(指令和数据)的真正运行实例。用户下达运行程序的命令后,就会产生进程。同一程序可产生多个进程(一对多关系),以允许同时有多位用户运行同一程序,却不会相冲突。
机械视角
2019/10/23
7600
浅谈:Golang 并发
抢占系统调用执行时间过长的goroutine(22)
本文是《Go语言调度器源代码情景分析》系列的第22篇,也是第六章《抢占调度》的第2小节。
阿波张
2019/06/24
1.5K0
Go1.14发布了,快来围观新的特性啦
如期而至,Go1.14发布了,和往常一样,该版本保留了Go 1兼容性的承诺,这个版本的大部分更新在工具链 、运行时库的性能提升方面,总的来说,还是在已有的基础上不断优化提成,大家期待的泛型还没有到来,下面一块看看新的变化吧,以下变化我本地测试过。
阿伟
2020/03/10
5980
Go1.14发布了,快来围观新的特性啦
Golang GPM 模型剖析
Golang 程序启动时首先会创建进程,然后创建主线程,主线程会执行 runtime 初始化的一些代码,包括调度器的初始化,然后会启动调度器,调度器会不断寻找需要运行的 goroutine 与内核线程绑定运行。
田飞雨
2021/12/13
1.2K0
Golang GPM 模型剖析
深入理解Go调度原理和实现
本文深入分析Go调度原理和实现,全文包含的主要内容有:Go程序是怎么运行起来的,经历了哪些流程,调度G的策略和时机,程序是如何在执行runtime代码与用户代码之间来回切换的。文章内容很长,感兴趣的同学可以收藏慢慢看。本文中分析的代码是Go1.14版本,涉及到的文件都在runtime包下。
数据小冰
2022/08/15
1.1K0
深入理解Go调度原理和实现
相关推荐
从源码剖析Go语言基于信号抢占式调度
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验