pandas實(shí)現(xiàn)數(shù)據(jù)合并的示例代碼_第1頁(yè)
pandas實(shí)現(xiàn)數(shù)據(jù)合并的示例代碼_第2頁(yè)
pandas實(shí)現(xiàn)數(shù)據(jù)合并的示例代碼_第3頁(yè)
pandas實(shí)現(xiàn)數(shù)據(jù)合并的示例代碼_第4頁(yè)
pandas實(shí)現(xiàn)數(shù)據(jù)合并的示例代碼_第5頁(yè)
已閱讀5頁(yè),還剩4頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第pandas實(shí)現(xiàn)數(shù)據(jù)合并的示例代碼1李四已婚研究生

pd.merge(df1,df2,left_on='姓名',right_on='員工姓名')#運(yùn)算結(jié)果如下

姓名性別職業(yè)員工姓名婚姻狀況學(xué)歷

0張三男IT張三未婚本科

1李四女運(yùn)營(yíng)李四已婚研究生

2.3指定數(shù)據(jù)連接方式--how參數(shù)

#how參數(shù)決定了將如何用on指定的key對(duì)兩個(gè)DataFrame進(jìn)行連接,主要是比對(duì)on指定的兩個(gè)df的列標(biāo)簽,

#如果取并集,則是outer,即連接后的Df會(huì)包含兩個(gè)df所有的key值;如果取交集,則是inner,即連接后的df只會(huì)包含兩個(gè)df均有的key值

#如果需要保證左邊df的key值必須有,右邊的不一定,則是left;如果需要保證右邊df的key值必須有,左邊的不一定,則是right

#df1數(shù)據(jù)源如下

姓名性別職業(yè)

0張三男IT

1李四女運(yùn)營(yíng)

#df2數(shù)據(jù)源如下

姓名婚姻狀況學(xué)歷

0張三未婚本科

1李四已婚研究生

2王五未婚博士

3麻子已婚研究生

pd.merge(df1,df2,how='outer')#運(yùn)算結(jié)果如下

姓名性別職業(yè)婚姻狀況學(xué)歷

0張三男IT未婚本科

1李四女運(yùn)營(yíng)已婚研究生

2王五NaNNaN未婚博士

3麻子NaNNaN已婚研究生

pd.merge(df1,df2,how='inner')#運(yùn)算結(jié)果如下

姓名性別職業(yè)婚姻狀況學(xué)歷

0張三男IT未婚本科

1李四女運(yùn)營(yíng)已婚研究生

pd.merge(df1,df2,how='left')#運(yùn)算結(jié)果如下

姓名性別職業(yè)婚姻狀況學(xué)歷

0張三男IT未婚本科

1李四女運(yùn)營(yíng)已婚研究生

pd.merge(df1,df2,how='right')#運(yùn)算結(jié)果如下

姓名性別職業(yè)婚姻狀況學(xué)歷

0張三男IT未婚本科

1李四女運(yùn)營(yíng)已婚研究生

2王五NaNNaN未婚博士

3麻子NaNNaN已婚研究生

2.4設(shè)置使用行索引作為連接key--left_index及right_index參數(shù)

#merge一般用于key為列標(biāo)簽時(shí),對(duì)兩個(gè)df進(jìn)行鏈接,類似SQL中的連表操作,不過(guò)如果需要,也可以使用行的index作為key進(jìn)行連表

#left_index、right_index,類似于left_on和right_on,這四個(gè)可以left和right兩兩結(jié)合,比如df1的index其實(shí)就是df2的列的key,此時(shí)便可以使用left_index=True,right_on='B',或者直接對(duì)兩個(gè)df用index進(jìn)行連表

#df1數(shù)據(jù)源如下

姓名性別職業(yè)

0張三男IT

1李四女運(yùn)營(yíng)

#df2數(shù)據(jù)源如下

姓名婚姻狀況學(xué)歷

0張三未婚本科

1李四已婚研究生

2王五未婚博士

3麻子已婚研究生

pd.merge(df1,df2,left_index=True,right_index=True#運(yùn)算結(jié)果如下

姓名_x性別職業(yè)姓名_y婚姻狀況學(xué)歷

0張三男IT張三未婚本科

1李四女運(yùn)營(yíng)李四已婚研究生

2.5設(shè)置有相同列時(shí)自動(dòng)加后綴--suffixes

#如果連接的兩個(gè)df,除了key列,或者on指定的列外,還有相同的列標(biāo)簽,為了進(jìn)行區(qū)分,pd會(huì)自動(dòng)在相同的列標(biāo)簽分別添加后綴,默認(rèn)是x、y,也可通過(guò)suffixes顯示指定

#df1數(shù)據(jù)源

姓名性別職業(yè)

0張三男IT

1李四女運(yùn)營(yíng)

#df2數(shù)據(jù)源

姓名職業(yè)婚姻狀況學(xué)歷

0張三IT未婚本科

1李四運(yùn)營(yíng)已婚研究生

2王五產(chǎn)品未婚博士

3麻子市場(chǎng)已婚研究生

pd.merge(df1,df2,on='姓名',how='outer',suffixes=('_表1','_表2'))#運(yùn)算結(jié)果如下

姓名性別職業(yè)_表1職業(yè)_表2婚姻狀況學(xué)歷

0張三男ITIT未婚本科

1李四女運(yùn)營(yíng)運(yùn)營(yíng)已婚研究生

2王五NaNNaN產(chǎn)品未婚博士

3麻子NaNNaN市場(chǎng)已婚研究生

三、join

join整體功能與merge類似,也與SQL中的join語(yǔ)法功能和表現(xiàn)完全一樣,只不過(guò)join可以高效的連接多個(gè)DataFrame,而merge只能連接兩個(gè),相當(dāng)于join的快捷方式,join連接時(shí)默認(rèn)使用行index進(jìn)行連接,但也可以指定類似merge使用列標(biāo)簽連表。

3.1概述

#join函數(shù)的使用方法如下

DataFrame.join(

other,#指定需要連接的其他df,如果是一個(gè),則直接寫(xiě)df,如果是多個(gè),則可以是多個(gè)df組成的列表或元組,如果是多個(gè),則不支持設(shè)置on、lsuffix以及sort

on=None,#默認(rèn)以行index連接,也可以指定列標(biāo)簽,如果需要指定多個(gè)列,則可以是列表或元組形式

how='left',#連接的方式,枚舉為left、right、outer、inner,默認(rèn)是left

lsuffix='',#左df重復(fù)列的后綴,只對(duì)連接2個(gè)df有效,連接多個(gè)df如果列標(biāo)簽有重復(fù),則會(huì)報(bào)錯(cuò)

rsuffix='',#右df重復(fù)列的后綴,只對(duì)連接2個(gè)df有效,連接多個(gè)df如果列標(biāo)簽有重復(fù),則會(huì)報(bào)錯(cuò)

sort=False#排序,按照字典順序?qū)Y(jié)果在連接鍵上排序。如果為False,連接鍵的順序取決于連接類型(關(guān)鍵字)

3.2行索引連接--無(wú)重復(fù)列標(biāo)簽

#默認(rèn)join以行索引index連接,如果多個(gè)df沒(méi)有重復(fù)的列標(biāo)簽,則可以直接進(jìn)行連接,無(wú)需設(shè)置其他參數(shù)

#此時(shí),也可以一次性連接多個(gè)df,

#df1數(shù)據(jù)源

姓名性別

0張三男

1李四女

#df2數(shù)據(jù)源

職業(yè)婚姻狀況

0IT未婚

1運(yùn)營(yíng)已婚

df1.join(df2)#運(yùn)算結(jié)果如下

姓名性別職業(yè)婚姻狀況

0張三男IT未婚

1李四女運(yùn)營(yíng)已婚

3.3行索引連接--有重復(fù)列標(biāo)簽

#當(dāng)有重復(fù)列標(biāo)簽時(shí),必須設(shè)置lsuffix和rsuffix參數(shù),否則就會(huì)報(bào)錯(cuò)

#df1數(shù)據(jù)源

姓名性別

0張三男

1李四女

#df2數(shù)據(jù)源

姓名職業(yè)婚姻狀況

0張三IT未婚

1李四運(yùn)營(yíng)已婚

df1.join(df2,lsuffix='_a',rsuffix='_b')#運(yùn)算結(jié)果如下

姓名_a性別姓名_b職業(yè)婚姻狀況

0張三男張三IT未婚

1李四女李四運(yùn)營(yíng)已婚

3.4列標(biāo)簽鏈接--列標(biāo)簽不相同,但內(nèi)容有相同

#類似merge,如果想鏈接的兩個(gè)df,可能列標(biāo)簽沒(méi)有相同,但是某列標(biāo)簽內(nèi)容有相同,希望用該列作為Key進(jìn)行連表,則可以分別設(shè)置左右on的key

#df1數(shù)據(jù)源

姓名性別

0張三男

1李四女

#df2數(shù)據(jù)源

員工姓名職業(yè)婚姻狀況

0張三IT未婚

1李四運(yùn)營(yíng)已婚

2王五運(yùn)營(yíng)已婚

df1.join(df2.set_index('員工姓名'),on='姓名')#運(yùn)算結(jié)果如下

姓名性別職業(yè)婚姻狀況

0張三男IT未婚

1李四女運(yùn)營(yíng)已婚

3.5列標(biāo)簽鏈接--列標(biāo)簽有相同,內(nèi)容有相同

#以列標(biāo)簽連表,就類似merge默認(rèn)的用法,如果除了on指定的列標(biāo)簽,兩個(gè)df還有其他相同的列標(biāo)簽,則lsuffix和rsuffix必須設(shè)置,否則會(huì)報(bào)錯(cuò)

#df1數(shù)據(jù)源

姓名性別

0張三男

1李四女

#df2數(shù)據(jù)源

姓名職業(yè)婚姻狀況

0張三IT未婚

1李四運(yùn)營(yíng)已婚

2王五運(yùn)營(yíng)已婚

df1.join(df2.set_index('姓名'),on='姓名')#運(yùn)算結(jié)果如下

姓名性別職業(yè)婚姻狀況

0張三男IT未婚

1李四女運(yùn)營(yíng)已婚

3.6列標(biāo)簽鏈接--列標(biāo)簽和列內(nèi)容均不相同

此時(shí),無(wú)法使用列標(biāo)簽連接兩個(gè)DataFrame

3.7join和merge主要異同

相同點(diǎn):

連接方式的枚舉相同,即均可以通過(guò)how指定連接方式,有l(wèi)eft、right、inner、outer四種方式,效果也一樣在用列標(biāo)簽連接時(shí),均可以通過(guò)on設(shè)置連接的列標(biāo)簽key均可以以列標(biāo)簽或行索引進(jìn)行連表,只不過(guò)默認(rèn)的方式不一樣merger默認(rèn)是列標(biāo)簽連接,可通過(guò)設(shè)置left_index和right_index為T(mén)rue,切換為按照行索引連表join默認(rèn)是行索引連表,可通過(guò)設(shè)置on切換為按照列標(biāo)簽連接

不同點(diǎn):

默認(rèn)連接軸方向不同,merge默認(rèn)按照列標(biāo)簽連接,join默認(rèn)按照行index連接可連接DataFrame數(shù)量不同,merge只能連接2個(gè),join可一次性連接多個(gè)列標(biāo)簽均不相同的DataFrame,如果列標(biāo)簽有相同,則只能連2個(gè)

四、append

該方法主要是對(duì)存量的DataFrame添加新的行,或者直接將另外一個(gè)DataFrame按0軸(按行)合并到現(xiàn)有的DataFrame上,并且要求兩個(gè)DataFrame的列數(shù)完全相等

該方法在比如需要對(duì)多個(gè)列數(shù)相同的數(shù)據(jù)進(jìn)行合并分析時(shí)較為有用,不過(guò)直接使用pd.concat(df1,df2)也能達(dá)到目的,只是append用法可能更為直觀些

importpandasaspd

#df1數(shù)據(jù)源如下

0-0.6067870.256638

1-1.333439-0.335560

#df2數(shù)據(jù)源如下

0-0.6067870.256638

1-1.333439-0.335560

df1.append(df2)

#運(yùn)算結(jié)果如下:

00.966491-0.316075

1-0.2988861.016128

00.5926910.478276

11.1173251.294424

#其實(shí)以上方法,效果等同于concat的默認(rèn)行為

pd.concat(df1,df2)

五、assign

該方法主要是對(duì)存量的DataFrame添加新的列,并且要求新增的列,對(duì)應(yīng)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論