在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的数据去重的更多相关文章

  1. Spark与Pandas中DataFrame对比

      Pandas Spark 工作方式 单机single machine tool,没有并行机制parallelism不支持Hadoop,处理大量数据有瓶颈 分布式并行计算框架,内建并行机制paral ...

  2. Spark与Pandas中DataFrame对比(详细)

      Pandas Spark 工作方式 单机single machine tool,没有并行机制parallelism不支持Hadoop,处理大量数据有瓶颈 分布式并行计算框架,内建并行机制paral ...

  3. Pandas中DataFrame修改列名

    Pandas中DataFrame修改列名:使用 rename df = pd.read_csv('I:/Papers/consumer/codeandpaper/TmallData/result01- ...

  4. pandas中DataFrame的ix,loc,iloc索引方式的异同

    pandas中DataFrame的ix,loc,iloc索引方式的异同 1.loc: 按照标签索引,范围包括start和end 2.iloc: 在位置上进行索引,不包括end 3.ix: 先在inde ...

  5. pandas中DataFrame重置设置索引

    在pandas中,经常对数据进行处理 而导致数据索引顺序混乱,从而影响数据读取.插入等. 小笔总结了以下几种重置索引的方法: import pandas as pd import numpy as n ...

  6. pandas中DataFrame对象to_csv()方法中的encoding参数

    当使用pd.read_csv()方法读取csv格式文件的时候,常常会因为csv文件中带有中文字符而产生字符编码错误,造成读取文件错误,在这个时候,我们可以尝试将pd.read_csv()函数的enco ...

  7. Pandas中DataFrame数据合并、连接(concat、merge、join)之merge

    二.merge:通过键拼接列 类似于关系型数据库的连接方式,可以根据一个或多个键将不同的DatFrame连接起来. 该函数的典型应用场景是,针对同一个主键存在两张不同字段的表,根据主键整合到一张表里面 ...

  8. Pandas中DataFrame数据合并、连接(concat、merge、join)之join

    pandas.DataFrame.join 自己弄了很久,一看官网.感觉自己宛如智障.不要脸了,直接抄 DataFrame.join(other, on=None, how='left', lsuff ...

  9. Pandas中DataFrame数据合并、连接(concat、merge、join)之concat

    一.concat:沿着一条轴,将多个对象堆叠到一起 concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False, key ...

随机推荐

  1. 《MIT 6.828 Lab 1 Exercise 12》实验报告

    本实验的网站链接:MIT 6.828 Lab 1 Exercise 12. 题目 Exercise 12. Modify your stack backtrace function to displa ...

  2. RestTemplate实践(及遇到的问题)

    在微服务都是以HTTP接口的形式暴露自身服务的,因此在调用远程服务时就必须使用HTTP客户端.我们可以使用JDK原生的URLConnection.Apache的Http Client.Netty的异步 ...

  3. PowerPoint储存此文件时发生错误 出现错误的问题解决方法

    .单击“文件”,单击“选项”,然后单击“加载项”. . 在管理下拉框中选择“COM加载项”,单击“转到”按钮. . 检查是否存在有任何加载项,清除所有复选框来禁用它们. . 关闭PPT并重新启动,测试 ...

  4. 【LOJ】#3101. 「JSOI2019」精准预测

    LOJ#3101. 「JSOI2019」精准预测 设0是生,1是死,按2-sat连边那么第一种情况是\((t,x,1) \rightarrow (t + 1,y,1)\),\((t + 1,y, 0) ...

  5. Dao设计模式简单实现

    一.什么是Dao设计模式 Dao设计模式封装了操作具体数据库的细节,对业务层提供操作数据库的接口,因此降低了业务层代码与具体数据库之间的耦合,有利于人员分工,增加了程序的可移植性. Dao设计模式中主 ...

  6. Linux系列(15)之进程管理

    详细情况查看:https://www.cnblogs.com/dengyungao/p/8523628.html 1.查看进程 有两个命令可以查看进程,分别是ps与top(推荐使用),那他们有什么区别 ...

  7. phpstudy的设置目录列表显示403找不到

    小白视角具体步骤如下 在phpstudy的->其它选项菜单->phpstudy设置->允许目录列表 phpstudy->其他选项菜单->站点域名管理(新增并保存) 然后会 ...

  8. Go-环境搭建-hello world-变量常量定义-函数使用基础

    目录 编程语言科普 常见语言的背景 go 为什么这么火? 环境搭建(很重要) ide 编辑器 注释 第一个程序 Hello world! 编译与执行 变量类型 数字类型 字符串类型 布尔类型 常量 函 ...

  9. vue开发环境配置跨域,一步到位

    本文要实现的是:使用vue-cli搭建的项目在开发时配置跨域,上线后不做任何任何修改,接口也可以访问,前端跨域解决方案 production:产品 生产环境 development:开发 开发环境 1 ...

  10. 植物大战僵尸:寻找召唤僵尸关键CALL

    实验目标:通过遍历寻找召唤僵尸的CALL,通过调用CALL出现自定义的僵尸,加速僵尸的出现. 僵尸CALL的遍历技巧: 我们可以通过僵尸出现在屏幕中的个数来遍历寻找僵尸出现的CALL 首先打开CE-& ...