1、從合併的方式看merge和join是一樣的,有left/right/inner/outer,而concat只有inner/outer兩種,因為merge和join參與合併的對象有左右區分,而concat第一個參數是多個dataframe組成的列表,沒有嚴格的左右區分,如果排除最後結果中列的順序的話,可以看成是一樣的。例:
import pandas as pd
from pandas import Series,DataFrame,Panel
df1 = DataFrame([['a','b'],['d','q'],['o','b'],['m','e']],index=['a','b','c','o'],columns=['number1','number2'])
df2 = DataFrame([['a','b'],['d','e'],['a','b'],['d','e']],columns=['col1','col2'],index=['f','a','g','c'])
print pd.concat([df1,df2],join='outer',axis=1)
print pd.concat([df2,df1],join='outer',axis=1)
2、merge合併的範圍最廣泛,可以合併左邊對象的索引/列和右邊對象的索引/列的四種組合;join次之,僅可以實現調用DataFrame的索引/列和參數DataFrame的索引的合併,也就是參數DataFrame的列不能參與合併;concat合併的範圍最小,只支持索引的合併,也就是說索引與索引的合併是三個函數共同的功能,例:
import pandas as pd
import numpy as np
from pandas import Series,DataFrame,Panel
df1 = DataFrame([['a','b'],['d','q'],['o','b'],['m','e']],index=['a','b','c','o'],columns=['number1','number2'])
df2 = DataFrame([['a','b'],['d','e'],['a','b'],['d','e']],columns=['col1','col2'],index=['f','a','g','c'])
print(pd.merge(df1,df2,left_index=True,right_index=True,how='outer'))
print(df1.join(df2,how='outer'))
print(pd.concat([df1,df2],join='outer',axis=1))
可以看出三個函數合併索引後輸出的結果是一樣的
number1 number2 col1 col2a a b d eb d q NaN NaNc o b d ef NaN NaN a bg NaN NaN a bo m e NaN NaN
number1 number2 col1 col2a a b d eb d q NaN NaNc o b d ef NaN NaN a bg NaN NaN a bo m e NaN NaN
number1 number2 col1 col2a a b d eb d q NaN NaNc o b d ef NaN NaN a bg NaN NaN a bo m e NaN NaN
3、concat和join的共同點是可以合併3個以上的對象,merge只合併兩個對象
打開APP閱讀更多精彩內容聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容圖片侵權或者其他問題,請聯繫本站作侵刪。 侵權投訴