pandas中DataFrame和Series的数据去重
在SQL语言中去重是一件相当简单的事情,面对一个表(也可以称之为DataFrame)我们对数据进行去重只需要GROUP BY 就好。

select custId,applyNo from tmp.online_service_startloan group by custId,applyNo
1.DataFrame去重
但是对于pandas的DataFrame格式就比较麻烦,我看了其他博客优化了如下三种方案。
我们先引入数据集:
import pandas as pd
data=pd.read_csv(r'D:/home/nohup.out.20191028.startloan.csv',encoding='utf-8')
print(data.info())

共有14936条数据,那我们还是按 custId和applyNo去重。
1.使用list后手写去重
定义去重函数:我这里使用了遍历行,添加列表的的方式去重。
# 定义去重函数
def dropRep(df):
list2=[]
for _,i in df.iterrows():
i=list(i)
if i not in list2:
list2.append(i)
return list2
keydata=data[['custId','applyNo']]
len1=keydata.count()
print('去重之前custId +applyNo:',len1) list2=dropRep(keydata)
print('去重之后custId +applyNo:',len(list2))
2.使用list后set去重
用set去重其实遇到了很多问题,set里面的数据必须是不可变数据类型,可hash等等。。所以只能把key1+key2拼成字符串作为一个元素。
# 定义去重函数
def dropRepBySet(df):
set1=set()
for _,i in df.iterrows():
set1.add("_".join(list(map(lambda x:str(x),list(i)))))
return list(set1)
而且明显感觉这个方法比上面手写list遍历去重快一些
keydata=data[['custId','applyNo']]
len1=keydata.count()
print('去重之前custId +applyNo:',len1) list2=dropRepBySet(keydata) print('去重之后custId +applyNo:',len(list2))

3.使用pd.DataFrame自带drop_duplicates()函数去重
DataFrame.drop_duplicates(subset=None, keep='first', inplace=False)
- subset : column label or sequence of labels, optional
用来指定特定的列,默认所有列
- keep : {‘first’, ‘last’, False}, default ‘first’
first删除重复项并保留第一次出现的项,last删除重复保留最后一条,False就是删除重复、只要不重复的数据
- inplace : boolean, default False
是直接在原来数据上修改还是保留一个副本
keydata.drop_duplicates().count()

keydata.drop_duplicates(keep=False).count()

补充提取重复数据
# 剔除重复的数据
data1=keydata.drop_duplicates(keep=False)
data1.count()
#至少保留一条
data2=keydata.drop_duplicates(keep="first")
data2.count()
#这样正常的数据就重复了,重复的数据就只有一条
data1.append(data2).drop_duplicates(keep=False).count()
2.Series去重
我也是最近才遇到series去重这个场景,比较了一下两种去重的性能比较。
场景如下
sql==>pd.dataframe【数据量为8000rows】==>取出这个df的cust_id字段【series】==>转为list===>下一个sql:'''···where cust_id not in (%s)'''%".".join(list)
方法1:
方法2:seiries.drop_duplicates()

pandas中DataFrame和Series的数据去重的更多相关文章
- Spark与Pandas中DataFrame对比
Pandas Spark 工作方式 单机single machine tool,没有并行机制parallelism不支持Hadoop,处理大量数据有瓶颈 分布式并行计算框架,内建并行机制paral ...
- Spark与Pandas中DataFrame对比(详细)
Pandas Spark 工作方式 单机single machine tool,没有并行机制parallelism不支持Hadoop,处理大量数据有瓶颈 分布式并行计算框架,内建并行机制paral ...
- Pandas中DataFrame修改列名
Pandas中DataFrame修改列名:使用 rename df = pd.read_csv('I:/Papers/consumer/codeandpaper/TmallData/result01- ...
- pandas中DataFrame的ix,loc,iloc索引方式的异同
pandas中DataFrame的ix,loc,iloc索引方式的异同 1.loc: 按照标签索引,范围包括start和end 2.iloc: 在位置上进行索引,不包括end 3.ix: 先在inde ...
- pandas中DataFrame重置设置索引
在pandas中,经常对数据进行处理 而导致数据索引顺序混乱,从而影响数据读取.插入等. 小笔总结了以下几种重置索引的方法: import pandas as pd import numpy as n ...
- pandas中DataFrame对象to_csv()方法中的encoding参数
当使用pd.read_csv()方法读取csv格式文件的时候,常常会因为csv文件中带有中文字符而产生字符编码错误,造成读取文件错误,在这个时候,我们可以尝试将pd.read_csv()函数的enco ...
- Pandas中DataFrame数据合并、连接(concat、merge、join)之merge
二.merge:通过键拼接列 类似于关系型数据库的连接方式,可以根据一个或多个键将不同的DatFrame连接起来. 该函数的典型应用场景是,针对同一个主键存在两张不同字段的表,根据主键整合到一张表里面 ...
- Pandas中DataFrame数据合并、连接(concat、merge、join)之join
pandas.DataFrame.join 自己弄了很久,一看官网.感觉自己宛如智障.不要脸了,直接抄 DataFrame.join(other, on=None, how='left', lsuff ...
- Pandas中DataFrame数据合并、连接(concat、merge、join)之concat
一.concat:沿着一条轴,将多个对象堆叠到一起 concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False, key ...
随机推荐
- centos7服务搭建常用服务配置之一:SSH
目录 1 SSH服务协议 1.1 ssh服务协议说明 1.2 ssh服务工作机制 1.3 ssh加密技术说明 1.3.1 ssh实现安全链接建立,利用要是和锁头 1.3.2 ssh加密算法 1.4 s ...
- python一个源文件调用另一个源文件的函数
使用软件:pychram 这个是使用了Dight.py的mai()函数,也已经成功运行,但是为什么pychram在下面划红色的波浪线呐.
- JavaWeb开发常用的前端控件
罗列的下述控件大多依赖jquery插件,故可提前导入jquery插件以免出错 Validform 提供对表单的验证.提交等功能,具体可查阅其官方文档>>>Validform 示例如下 ...
- [转帖]中国新超算彻底告别进口CPU 国产芯片已可与国外抗衡
中国新超算彻底告别进口CPU 国产芯片已可与国外抗衡 蓝天·2017-10-17·本土IC 来源: 观察者网 https://www.laoyaoba.com/html/news/newsdetail ...
- 报表工具ActiveReports开发实例——物联网智能供水云平台
一.公司简介 山西汾西电子科技股份有限公司(以下简称:汾西电子)是经中国船舶重工集团批准,在原汾西重工电子科技公司基础上重组的专业从事智能电能表.水表.热量表及电动汽车充电设备研发生产的高科技公司. ...
- 基本mysql语句
一 select语句 基本语法 select 列名1,列名2 //可以使用完全限定的列名 tables.列名 form tables 过滤(where ) 分组(group ...
- 题目13 在O(1)时间删除链表节点
///////////////////////////////////////////////////////////////////////////////////// // 3. 题目13 在O( ...
- Colossal Fibonacci Numbers! UVA - 11582(快速幂,求解)
Problem Description The i’th Fibonacci number f(i) is recursively defined in the following way: •f(0 ...
- linux 安装telnet
一.CentOS下查看系统是否已安装telnet rpm -qa | grep telnet telnet 是挂在 xinetd 底下的,所以同时查看是否安装了xinetd服务 rpm -qa | g ...
- Django rest-framework框架-解析器
解析器: 开始: django: request.POST/ request.body 满足一下两个要求POST中才有值 1. 如果请求头中的 Content-Type: application/x- ...