18、pandas的concat()合并和多組數(shù)據(jù)合并

merge()函數(shù)是將兩個表格(DataFrame)進行匹配合并。

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

df1
df2

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

concat()縱向合并
concat()縱向合并后的表格信息

其實經(jīng)過concat()合并之后,所以還是以前的所以(系統(tǒng)默認(rèn)的),在其它表沒有的列會用NaN值填充,所以在實際使用的時候要主要重新設(shè)定索引并填充空值。

還有就是concat()函數(shù)合并的時候括號里是一個列表,也就是說concat()合并的應(yīng)該是一個可迭代的對象,所以df1和df2要組成一個列表形式。

concat()也能夠合并多個數(shù)據(jù)組:

concat()合并多組數(shù)據(jù)

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

使用 ignore_index=True重新設(shè)置索引和特定列的選擇

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

使用axis=1進行橫向合并
進行行列合并后的數(shù)據(jù)信息

在橫向合并時,合并的依據(jù)是索引,索引相同的行就會合并在一起。

在合并的時候如果只想要兩個數(shù)據(jù)組都有的列,那么只要添加參數(shù)join='inner'就可以了:

只合并共同有的列(縱向合并)

橫向合并也類似,添加join='inner',只有索引相同的行才會合并。主要'inner'要用引號,它在這里是一個字符串。

合并之后可以指定參數(shù)注明數(shù)據(jù)的來源:

參數(shù)keys注明數(shù)據(jù)的來源

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

添加索引名稱

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

橫向合并axis=1

選取特定列的時候要主要中括號的個數(shù)。

如果索引是我們合并使用的鍵,橫向合并并且是inner合并之后,我們就能夠用concat()實現(xiàn)類似merge()的功能,這樣就能實現(xiàn)多表一次性匹配合并。

使用join='inner'連接

咦?不是說類似于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變成所以列:

把title更改為索引列

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

進行聯(lián)結(jié)操作

索引也改了,方法也沒有錯,到底哪里除了問題呢?

原因就是索引列存在重復(fù)了(前面說過標(biāo)題有重復(fù)的):

索引不唯一

df.index.is_unique后面不需要用括號,因為is_unique是屬性。

所以我們先對title進行去索引處理:

使用 .reset_index()? 去除設(shè)置的索引

然后對title進行去重:

對title進行去重

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

重新把title作為索引

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

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

這樣就可以進行多表的聯(lián)結(jié)了。

總結(jié)一下就是:

先設(shè)定多組數(shù)據(jù)里都具有的一列作為索引,并且這一列不能有重復(fù)(有重復(fù)要進行去重處理);

然后就是要設(shè)定參數(shù)axis=1,參數(shù)axis=0的話是縱向拼接;

還有就是join='inner'。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容