Pandas中的merge 數(shù)據(jù)拼接方法

為了方便維護(hù)圃验,一般公司的數(shù)據(jù)在數(shù)據(jù)庫(kù)內(nèi)都是分表存儲(chǔ)的,比如用一個(gè)表存儲(chǔ)所有用戶(hù)的基本信息缝呕,一個(gè)表存儲(chǔ)用戶(hù)的消費(fèi)情況澳窑。所以,在日常的數(shù)據(jù)處理中供常,經(jīng)常需要將兩張表拼接起來(lái)使用摊聋,這樣的操作對(duì)應(yīng)到SQL中是join,在Pandas中則是用merge來(lái)實(shí)現(xiàn)栈暇。這篇文章就講一下merge的主要原理麻裁。

上面的引入部分說(shuō)到merge是用來(lái)拼接兩張表的,那么拼接時(shí)自然就需要將用戶(hù)信息一一對(duì)應(yīng)地進(jìn)行拼接源祈,所以進(jìn)行拼接的兩張表需要有一個(gè)共同的識(shí)別用戶(hù)的鍵(key)煎源。總結(jié)來(lái)說(shuō)香缺,整個(gè)merge的過(guò)程就是將信息一一對(duì)應(yīng)匹配的過(guò)程手销,下面介紹merge的四種類(lèi)型,分別為'inner'图张、'left'锋拖、'right''outer'诈悍。

inner

merge'inner'的類(lèi)型稱(chēng)為內(nèi)連接,它在拼接的過(guò)程中會(huì)取兩張表的鍵(key)的交集進(jìn)行拼接兽埃。什么意思呢侥钳?下面以圖解的方式來(lái)一步一步拆解。

首先我們有以下的數(shù)據(jù)讲仰,左側(cè)和右側(cè)的數(shù)據(jù)分別代表了用戶(hù)的基礎(chǔ)信息消費(fèi)信息慕趴,連接兩張表的鍵是userid

現(xiàn)在用'inner'的方式進(jìn)行merge

In [6]: df_1.merge(df_2,how='inner',on='userid')

過(guò)程圖解:

①取兩張表的鍵的交集鄙陡,這里df_1df_2userid的交集是{a,c}

②對(duì)應(yīng)匹配

image

③結(jié)果

過(guò)程匯總:

相信整個(gè)過(guò)程并不難理解冕房,上面演示的是同一個(gè)鍵下,兩個(gè)表對(duì)應(yīng)只有一條數(shù)據(jù)的情況(一個(gè)用戶(hù)對(duì)應(yīng)一條消費(fèi)記錄)趁矾,那么耙册,如果一個(gè)用戶(hù)對(duì)應(yīng)了多條消費(fèi)記錄的話(huà),那又是怎么拼接的呢毫捣?

假設(shè)現(xiàn)在的數(shù)據(jù)變成了下面這個(gè)樣子详拙,在df_2中,有兩條和a對(duì)應(yīng)的數(shù)據(jù):

同樣用inner的方式進(jìn)行merge

In [12]: df_1.merge(df_2,how='inner',on='userid')

整個(gè)過(guò)程除了對(duì)應(yīng)匹配階段蔓同,其他和上面基本都是一致的饶辙。

過(guò)程圖解:

①取兩張表的鍵的交集,這里df_1df_2userid的交集是{a,b,c}

②對(duì)應(yīng)匹配時(shí)斑粱,由于這里的a有兩條對(duì)應(yīng)的消費(fèi)記錄弃揽,故在拼接時(shí),會(huì)將用戶(hù)基礎(chǔ)信息表中a對(duì)應(yīng)的數(shù)據(jù)復(fù)制多一行來(lái)和右邊進(jìn)行匹配则北。

③結(jié)果

left 和right

'left''right'merge方式其實(shí)是類(lèi)似的矿微,分別被稱(chēng)為左連接右連接。這兩種方法是可以互相轉(zhuǎn)換的尚揣,所以在這里放在一起介紹涌矢。

  • 'left'

merge時(shí),以左邊表格的鍵為基準(zhǔn)進(jìn)行配對(duì)快骗,如果左邊表格中的鍵在右邊不存在娜庇,則用缺失值NaN填充。

  • 'right'

merge時(shí)方篮,以右邊表格的鍵為基準(zhǔn)進(jìn)行配對(duì)思灌,如果右邊表格中的鍵在左邊不存在,則用缺失值NaN填充恭取。

什么意思呢?用一個(gè)例子來(lái)具體解釋一下熄守,這是演示的數(shù)據(jù)

現(xiàn)在用'left'的方式進(jìn)行merge

In [21]: df_1.merge(df_2,how='left',on='userid')

過(guò)程圖解:

①以左邊表格的所有鍵為基準(zhǔn)進(jìn)行配對(duì)蜈垮。圖中耗跛,因?yàn)橛冶碇械?code>e不在左表中,故不會(huì)進(jìn)行配對(duì)攒发。

②若右表中的payment列合并到左表中调塌,對(duì)于沒(méi)有匹配值的用缺失值NaN填充

過(guò)程匯總:

對(duì)于'right'類(lèi)型的merge'left'其實(shí)是差不多的,只要把兩個(gè)表格的位置調(diào)換一下惠猿,兩種方式返回的結(jié)果就是一樣的()羔砾,如下:

In [22]: df_2.merge(df_1,how='right',on='userid')

至于'left''right'中(乃至于下面將介紹的'outer')連接的鍵是一對(duì)多的情況,原理和上方的'inner'是類(lèi)似的偶妖,這里便不再贅述姜凄。

outer

'outer'外連接,在拼接的過(guò)程中它會(huì)取兩張表的鍵(key)的并集進(jìn)行拼接趾访√恚看文字不夠直觀,還是上例子吧扼鞋!

還是使用上方用過(guò)的演示數(shù)據(jù)

這次使用'outer'進(jìn)行merge

In [24]: df_1.merge(df_2,how='outer',on='userid')

圖解如下:

①取兩張表鍵的并集申鱼,這里是{a,b,c,d,e}

②將兩張表的數(shù)據(jù)列拼起來(lái),對(duì)于沒(méi)有匹配到的地方云头,使用缺失值NaN進(jìn)行填充

能讀到這里的小伙伴想必也基本理解了merge的整個(gè)過(guò)程捐友,總結(jié)來(lái)說(shuō),merge的不同類(lèi)型區(qū)別就在于溃槐,拼接時(shí)選用的兩張表格的鍵的集合不同匣砖。關(guān)于Pandas的merge就介紹到這里!

學(xué)習(xí)來(lái)源

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末竿痰,一起剝皮案震驚了整個(gè)濱河市脆粥,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌影涉,老刑警劉巖变隔,帶你破解...
    沈念sama閱讀 219,039評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異蟹倾,居然都是意外死亡匣缘,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)鲜棠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)肌厨,“玉大人,你說(shuō)我怎么就攤上這事豁陆「贪郑” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,417評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵盒音,是天一觀的道長(zhǎng)表鳍。 經(jīng)常有香客問(wèn)我馅而,道長(zhǎng),這世上最難降的妖魔是什么譬圣? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,868評(píng)論 1 295
  • 正文 為了忘掉前任瓮恭,我火速辦了婚禮,結(jié)果婚禮上厘熟,老公的妹妹穿的比我還像新娘屯蹦。我一直安慰自己,他們只是感情好绳姨,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布登澜。 她就那樣靜靜地躺著,像睡著了一般就缆。 火紅的嫁衣襯著肌膚如雪帖渠。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,692評(píng)論 1 305
  • 那天竭宰,我揣著相機(jī)與錄音空郊,去河邊找鬼。 笑死切揭,一個(gè)胖子當(dāng)著我的面吹牛狞甚,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播廓旬,決...
    沈念sama閱讀 40,416評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼哼审,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了孕豹?” 一聲冷哼從身側(cè)響起涩盾,我...
    開(kāi)封第一講書(shū)人閱讀 39,326評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎励背,沒(méi)想到半個(gè)月后春霍,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,782評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡叶眉,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評(píng)論 3 337
  • 正文 我和宋清朗相戀三年址儒,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片衅疙。...
    茶點(diǎn)故事閱讀 40,102評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡莲趣,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出饱溢,到底是詐尸還是另有隱情喧伞,我是刑警寧澤,帶...
    沈念sama閱讀 35,790評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站絮识,受9級(jí)特大地震影響绿聘,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜次舌,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望兽愤。 院中可真熱鬧彼念,春花似錦、人聲如沸浅萧。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,996評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)洼畅。三九已至吩案,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間帝簇,已是汗流浹背徘郭。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,113評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留丧肴,地道東北人残揉。 一個(gè)月前我還...
    沈念sama閱讀 48,332評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像芋浮,于是被迫代替她去往敵國(guó)和親抱环。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評(píng)論 2 355