merge()函數(shù)是將兩個表格(DataFrame)進行匹配合并。
在實際的使用中,我們也會用到將兩組或者多組數(shù)據(jù)直接簡單的合并,并不需要進行匹配,這時候就需要用到concat()函數(shù)了。


現(xiàn)在要將它們縱向直接合并起來:


其實經(jīng)過concat()合并之后,所以還是以前的所以(系統(tǒng)默認(rèn)的),在其它表沒有的列會用NaN值填充,所以在實際使用的時候要主要重新設(shè)定索引并填充空值。
還有就是concat()函數(shù)合并的時候括號里是一個列表,也就是說concat()合并的應(yīng)該是一個可迭代的對象,所以df1和df2要組成一個列表形式。
concat()也能夠合并多個數(shù)據(jù)組:

如果我們要重新設(shè)置索引的話可以使用ignore_index=True進行新所以的設(shè)定,也可以進行特定列的選擇(進行特定列的選擇的時候一定要特別主要中括號的使用)。

concat()函數(shù)還能進行橫向的合并,橫向的合并使用參數(shù)axis=1:


在橫向合并時,合并的依據(jù)是索引,索引相同的行就會合并在一起。
在合并的時候如果只想要兩個數(shù)據(jù)組都有的列,那么只要添加參數(shù)join='inner'就可以了:

橫向合并也類似,添加join='inner',只有索引相同的行才會合并。主要'inner'要用引號,它在這里是一個字符串。
合并之后可以指定參數(shù)注明數(shù)據(jù)的來源:

添加數(shù)據(jù)來源的標(biāo)簽之后,索引就變成了多層索引,可以使用names給這些索引添加索引名稱:

這些方法也可以使用在橫向合并上:

選取特定列的時候要主要中括號的個數(shù)。
如果索引是我們合并使用的鍵,橫向合并并且是inner合并之后,我們就能夠用concat()實現(xiàn)類似merge()的功能,這樣就能實現(xiàn)多表一次性匹配合并。

咦?不是說類似于merge()的功能嗎?怎么多組數(shù)據(jù)直接的合并并沒有實現(xiàn)真正的聯(lián)結(jié),而僅僅只是進行了拼接而已呢?
這個地方有一個需要注意的就是多表聯(lián)結(jié)的時候如果沒有指定title為索引,那么系統(tǒng)就會使用默認(rèn)的索引,所以會導(dǎo)致聯(lián)結(jié)不準(zhǔn)確的情況,如果我們要進行準(zhǔn)確的聯(lián)結(jié),首先需要把title變成所以列:

更改索引之后在進行上一步的操作:

索引也改了,方法也沒有錯,到底哪里除了問題呢?
原因就是索引列存在重復(fù)了(前面說過標(biāo)題有重復(fù)的):

df.index.is_unique后面不需要用括號,因為is_unique是屬性。
所以我們先對title進行去索引處理:

然后對title進行去重:

去重之后重新把title作為索引:

然后在進行join=‘inner’的聯(lián)結(jié)操作:

這樣就可以進行多表的聯(lián)結(jié)了。
總結(jié)一下就是:
先設(shè)定多組數(shù)據(jù)里都具有的一列作為索引,并且這一列不能有重復(fù)(有重復(fù)要進行去重處理);
然后就是要設(shè)定參數(shù)axis=1,參數(shù)axis=0的話是縱向拼接;
還有就是join='inner'。