python的去重以及數(shù)據(jù)合并的用法說(shuō)明
python去重及數(shù)據(jù)合并
drop_dupicates
參數(shù)含義:
subset
:即表示要去重指定參考的列keep
: {‘first’, ‘last’, False}, default ‘first’
inplace:boolean, default False, 直接在原來(lái)的數(shù)據(jù)上修改還是保留副本
data = pd.DataFrame({'id':[1,1,2],'value':[12,14,27]}) #第一個(gè)參數(shù)傳入需要比對(duì)的列,在"id"列有相同的id,則進(jìn)行去重 data.drop_duplicates(['id'],keep='last',inplace=True) #我想比較"id"、"value"兩列的值全部相同時(shí)則去重 data.drop_duplicates(['id','value'],keep='last',inplace=True) #如果想直接比較數(shù)據(jù)中的全部列都相同時(shí)才能去除,則可以按照如下方法.keep默認(rèn)的是保留第一個(gè) data.drop_duplicates()
merge
首先關(guān)于連接,從SQL中的可以得知,連接主要分為外連接和內(nèi)連接:
內(nèi)連接
內(nèi)連接是指在兩個(gè)數(shù)據(jù)表中,根據(jù)其指定合并的列,找到其交集,也就是既在df1中出現(xiàn),也在df2中出現(xiàn)的數(shù)據(jù)
df1=pd.DataFrame({'key':['b','b','a','c','a','a','b'], ? ? ? ? ? ? ? ? ? 'data':range(7)}) df2=pd.DataFrame({'key':['a','b','d'], ? ? ? ? ? ? ? ? ? 'data2':range(3)}) df = pd.merge(df1,df2,on='key',how='inner') #不寫(xiě)how也沒(méi)關(guān)系,因?yàn)閙erge默認(rèn)的就是內(nèi)連接?
假設(shè)如果在df1和df2中的指定要合并的列的列名不一致的話,則需要顯式指定根據(jù)哪一列進(jìn)行合并
df3=pd.DataFrame({'key1':['b','b','a','c','a','a','b'], ? ? ? ? ? ? ? ? ? 'data':range(7)}) df4=pd.DataFrame({'key2':['a','b','d'], ? ? ? ? ? ? ? ? ? 'data2':range(3)}) df = pd.merge(df3,df4,left_on='key1',right_on='key2') # 該結(jié)果比上面的on='key'的結(jié)果多一列相同的列,但是兩個(gè)的本質(zhì)是一樣的,都是內(nèi)連接
外連接
外連接可以分為三種,全外連接、左連接和右連接。
全外連接就是保留兩個(gè)表中指定合并的列關(guān)鍵字的并集,然后在左右兩個(gè)表中找到相對(duì)應(yīng)的數(shù)據(jù)進(jìn)行填充,沒(méi)有的用NAN代替
df1=pd.DataFrame({'key':['b','b','a','c','a','a','b'], ? ? ? ? ? ? ? ? ? 'data':range(7)}) df2=pd.DataFrame({'key':['a','b','d'], ? ? ? ? ? ? ? ? ? 'data2':range(3)}) df = pd.merge(df1,df2,on='key',how='outer')
右連接是保留右表中指定列的所有關(guān)鍵字,然后去左表中找到指定列對(duì)應(yīng)的數(shù)據(jù)進(jìn)行補(bǔ)充,沒(méi)有的就NAN代替
df = pd.merge(df1,df2,on='key',how='right')
左連接是保留左表中指定列的所有關(guān)鍵字,然后去右表中找到指定列對(duì)應(yīng)的數(shù)據(jù)進(jìn)行補(bǔ)充,沒(méi)有的就NAN代替
df = pd.merge(df1,df2,on='key',how='left')
python去重腳本
可以用來(lái)去除字典、漏洞數(shù)量等
使用方法,將要去重的部分保存成為csv格式,并命名為all.csv,直接執(zhí)行后,會(huì)在當(dāng)前目錄下生成qc.csv的文件!
#coding:utf-8 ciku=open(r'all.csv','r') ? #打開(kāi)需要去重文件 xieci=open(r'qc.csv','w') ? #打開(kāi)處理后存放的文件 cikus=ciku.readlines()? list2 = {}.fromkeys(cikus).keys() ? ? #列表去重方法,將列表數(shù)據(jù)當(dāng)作字典的鍵寫(xiě)入字典,依據(jù)字典鍵不可重復(fù)的特性去重 i=1 for line in list2: ?? ?if line[0]!=',': ?? ??? ?# print line[0:-1].decode('utf-8').encode('gbk') ?? ??? ?# print ?u"writing"+i ?? ??? ?i+=1 ?? ??? ?xieci.writelines(line) xieci.close()
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
python實(shí)現(xiàn)ip地址的包含關(guān)系判斷
這篇文章主要介紹了python實(shí)現(xiàn)ip地址的包含關(guān)系判斷,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-02-02Pyinstaller 打包發(fā)布經(jīng)驗(yàn)總結(jié)
這篇文章主要介紹了Pyinstaller 打包發(fā)布經(jīng)驗(yàn)總結(jié),使用Pyinstaller打包Python項(xiàng)目包含了大量的坑,感興趣的可以一起來(lái)了解一下2020-06-06Python基礎(chǔ)之變量基本用法與進(jìn)階詳解
這篇文章主要介紹了Python基礎(chǔ)之變量基本用法與進(jìn)階,結(jié)合實(shí)例形式詳細(xì)分析了Python變量引用、可變和不可變類型、局部變量和全局變量等相關(guān)原理與使用技巧,需要的朋友可以參考下2020-01-01教你用scrapy框架爬取豆瓣讀書(shū)Top250的書(shū)類信息
這篇文章主要介紹了教你用scrapy框架爬取豆瓣讀書(shū)Top250的書(shū)類信息,文中提供了解決思路和部分實(shí)現(xiàn)代碼,需要的朋友可以參考下2023-03-03Python實(shí)現(xiàn)求解斐波那契第n項(xiàng)的解法(包括矩陣乘法+快速冪)
這篇文章主要介紹怎么使用Python求解斐波那契第n項(xiàng),方法多樣,邏輯清晰,代碼簡(jiǎn)單詳細(xì),有這方面需要的朋友可以參考下2021-04-04詳細(xì)介紹Python語(yǔ)言中的按位運(yùn)算符
這篇文章主要介紹了Python語(yǔ)言中的按位運(yùn)算符,有需要的朋友可以參考一下2013-11-11Python面向?qū)ο缶幊讨庋b的藝術(shù)你了解嗎
這篇文章主要為大家詳細(xì)介紹了Python面向?qū)ο缶幊讨庋b的藝術(shù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-02-02