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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

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

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

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

0張三男IT張三未婚本科

1李四女運營李四已婚研究生

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

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

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

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

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

姓名性別職業(yè)

0張三男IT

1李四女運營

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

姓名婚姻狀況學歷

0張三未婚本科

1李四已婚研究生

2王五未婚博士

3麻子已婚研究生

pd.merge(df1,df2,how='outer')#運算結果如下

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

0張三男IT未婚本科

1李四女運營已婚研究生

2王五NaNNaN未婚博士

3麻子NaNNaN已婚研究生

pd.merge(df1,df2,how='inner')#運算結果如下

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

0張三男IT未婚本科

1李四女運營已婚研究生

pd.merge(df1,df2,how='left')#運算結果如下

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

0張三男IT未婚本科

1李四女運營已婚研究生

pd.merge(df1,df2,how='right')#運算結果如下

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

0張三男IT未婚本科

1李四女運營已婚研究生

2王五NaNNaN未婚博士

3麻子NaNNaN已婚研究生

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

#merge一般用于key為列標簽時,對兩個df進行鏈接,類似SQL中的連表操作,不過如果需要,也可以使用行的index作為key進行連表

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

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

姓名性別職業(yè)

0張三男IT

1李四女運營

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

姓名婚姻狀況學歷

0張三未婚本科

1李四已婚研究生

2王五未婚博士

3麻子已婚研究生

pd.merge(df1,df2,left_index=True,right_index=True#運算結果如下

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

0張三男IT張三未婚本科

1李四女運營李四已婚研究生

2.5設置有相同列時自動加后綴--suffixes

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

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

姓名性別職業(yè)

0張三男IT

1李四女運營

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

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

0張三IT未婚本科

1李四運營已婚研究生

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

3麻子市場已婚研究生

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

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

0張三男ITIT未婚本科

1李四女運營運營已婚研究生

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

3麻子NaNNaN市場已婚研究生

三、join

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

3.1概述

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

DataFrame.join(

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

on=None,#默認以行index連接,也可以指定列標簽,如果需要指定多個列,則可以是列表或元組形式

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

lsuffix='',#左df重復列的后綴,只對連接2個df有效,連接多個df如果列標簽有重復,則會報錯

rsuffix='',#右df重復列的后綴,只對連接2個df有效,連接多個df如果列標簽有重復,則會報錯

sort=False#排序,按照字典順序對結果在連接鍵上排序。如果為False,連接鍵的順序取決于連接類型(關鍵字)

3.2行索引連接--無重復列標簽

#默認join以行索引index連接,如果多個df沒有重復的列標簽,則可以直接進行連接,無需設置其他參數(shù)

#此時,也可以一次性連接多個df,

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

姓名性別

0張三男

1李四女

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

職業(yè)婚姻狀況

0IT未婚

1運營已婚

df1.join(df2)#運算結果如下

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

0張三男IT未婚

1李四女運營已婚

3.3行索引連接--有重復列標簽

#當有重復列標簽時,必須設置lsuffix和rsuffix參數(shù),否則就會報錯

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

姓名性別

0張三男

1李四女

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

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

0張三IT未婚

1李四運營已婚

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

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

0張三男張三IT未婚

1李四女李四運營已婚

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

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

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

姓名性別

0張三男

1李四女

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

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

0張三IT未婚

1李四運營已婚

2王五運營已婚

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

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

0張三男IT未婚

1李四女運營已婚

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

#以列標簽連表,就類似merge默認的用法,如果除了on指定的列標簽,兩個df還有其他相同的列標簽,則lsuffix和rsuffix必須設置,否則會報錯

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

姓名性別

0張三男

1李四女

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

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

0張三IT未婚

1李四運營已婚

2王五運營已婚

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

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

0張三男IT未婚

1李四女運營已婚

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

此時,無法使用列標簽連接兩個DataFrame

3.7join和merge主要異同

相同點:

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

不同點:

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

四、append

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

該方法在比如需要對多個列數(shù)相同的數(shù)據(jù)進行合并分析時較為有用,不過直接使用pd.concat(df1,df2)也能達到目的,只是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)

#運算結果如下:

00.966491-0.316075

1-0.2988861.016128

00.5926910.478276

11.1173251.294424

#其實以上方法,效果等同于concat的默認行為

pd.concat(df1,df2)

五、assign

該方法主要是對存量的DataFrame添加新的列,并且要求新增的列,對應

溫馨提示

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

評論

0/150

提交評論