數(shù)據(jù)合并有多種方式,其中最常見的應(yīng)該就是交集和并集的求取。之前通過分析總結(jié)過pandas數(shù)據(jù)merge功能默認(rèn)的行為,其實(shí)默認(rèn)下求取的就是兩個(gè)數(shù)據(jù)的“交集”。
有如下數(shù)據(jù)定義:
In [26]: df1Out[26]: data1 key0 0 b1 1 b2 2 a3 3 c4 4 a5 5 a6 6 b
In [27]: df2Out[27]: data2 key0 0 a1 1 b2 2 d3 3 b
進(jìn)行merge的結(jié)果:
In [28]: pd.merge(df1,df2)Out[28]: data1 key data20 0 b 11 0 b 32 1 b 13 1 b 34 6 b 15 6 b 36 2 a 07 4 a 08 5 a 0
從上面的結(jié)果中能夠看出,merge的默認(rèn)處理行為是求取了兩組數(shù)據(jù)key的交集,但是對于key的值進(jìn)行了并集的求取。其實(shí)也很好理解,如果僅僅是求取交集而數(shù)據(jù)沒有任何合并那就不叫做數(shù)據(jù)合并了。
接下來試一下制定了參數(shù)的的交集數(shù)據(jù)合并處理:
In [29]: pd.merge(df1,df2,how='inner')Out[29]: data1 key data20 0 b 11 0 b 32 1 b 13 1 b 34 6 b 15 6 b 36 2 a 07 4 a 08 5 a 0
In [30]: result_inner = pd.merge(df1,df2,how='inner')In [31]: result_default = pd.merge(df1,df2)
In [32]: result_inner == result_defaultOut[32]: data1 key data20 True True True1 True True True2 True True True3 True True True4 True True True5 True True True6 True True True7 True True True8 True True True
通過上面的結(jié)果可以看出:制定了參數(shù)的的交集數(shù)據(jù)合并處理的結(jié)果與數(shù)據(jù)合并方法merge的默認(rèn)行為是一致的。
再試一下并集數(shù)據(jù)合并處理方法,這需要制定參數(shù)how為outer:
In [35]: result_outer = pd.merge(df1,df2,how='outer')
In [36]: result_outerOut[36]: data1 key data20 0.0 b 1.01 0.0 b 3.02 1.0 b 1.03 1.0 b 3.04 6.0 b 1.05 6.0 b 3.06 2.0 a 0.07 4.0 a 0.08 5.0 a 0.09 3.0 c NaN10 NaN d 2.0
通過上面的執(zhí)行結(jié)果可以看出:合并后的數(shù)據(jù)中的key擁有了兩組數(shù)據(jù)所有的key,而數(shù)據(jù)雖然有一部分兩組數(shù)據(jù)不能夠重合,但也通過NaN的值進(jìn)行了相應(yīng)的填補(bǔ)。
還有一點(diǎn)需要注意的,那就是合并之后的數(shù)據(jù)個(gè)數(shù)。合并后的數(shù)據(jù)中,key的個(gè)數(shù)是兩組數(shù)據(jù)中分別擁有的數(shù)據(jù)的笛卡爾乘積。如果其中一組沒有的時(shí)候,進(jìn)行合并的時(shí)候另一組數(shù)據(jù)中會創(chuàng)建一個(gè)NaN數(shù)值的對象與之進(jìn)行合并。
以上這篇pandas進(jìn)行數(shù)據(jù)的交集與并集方式的數(shù)據(jù)合并方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持武林站長站。
新聞熱點(diǎn)
疑難解答
圖片精選