接到朋友求助,說本身一個數據庫裏的某個表有大量重複數據,使用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