接到朋友求助,说本身一个数据库里的某个表有大量重复数据,使用mysql语句处理的速度太慢,每次只能处理1W条数据,总共800W条数据须要处理,耗时耗力。分开处理也会有大量的遗漏数据须要二次三次处理,最后获得的数据仍是会不许确,很显然用mysql语句处理不怎么好。python
我想到了python中有一个模块pandas是专门用来处理海量数据的,立刻网上查下该模块是否有相关的方法,果真,pandas里的drop_duplicates方法就是用来去除重复数据的,而且该方法还提供了多个参数。mysql
朋友的需求为数据库表里的某个字段的记录不能重复,若是重复则保留最新的数据。需求已经明白,立刻开始动工。sql
使用Navicat 先将数据库里的须要处理的表同步到本地,而后在本地操做。数据库
直接上代码服务器
import pymysql import pandas as pda conn=pymysql.connect(host="127.0.0.1",user="root",passwd="pw",db="test001",charset="utf8") sql="select * from table001" data1 = pda.read_sql(sql,conn) print(data1.count()) data2 = data1.drop_duplicates(subset="big",keep="last") data2.to_sql("table002",con=conn,flavor="mysql",if_exists="append",index=False) print(data2.count())
table001表为原始表,big为表里不能重复的字段,keep="last"表明留重复数据的最后一条,table002表为清洗完数据保存数据的表。app
运行该脚本,十来分钟左右,800W条数据已经所有清洗完毕,还剩余200W条不重复数据,而且还和朋友正确的数据一条不差。ide
随后将数据表上传至朋友的线上服务器,朋友验证数据都没问题。code