<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Pandas知識(shí)點(diǎn)-合并操作merge

          共 2882字,需瀏覽 6分鐘

           ·

          2021-06-14 11:07

          merge()方法是Pandas中的合并操作,在數(shù)據(jù)處理過程中很常用,本文介紹merge()方法的具體用法。


          基礎(chǔ)合并操作




          merge(left, right): 將兩個(gè)DataFrame或Series合并到一起。left和right參數(shù)是必傳參數(shù),分別傳入一個(gè)DataFrame或Series對(duì)象,合并的順序與傳入的順序一致。從參數(shù)名left和right可以看出,merge()方法主要用于按列合并(橫向合并)。

          原理如下:


          merge()方法也可以實(shí)現(xiàn)按行合并(縱向)的效果,需要兩個(gè)DataFrame的列名完全一樣,且要指定合并方式為outer。


          如果兩個(gè)DataFrame的列名完全相同,使用outer合并方式,效果是將兩個(gè)DataFrame按行合并到一起。merge()默認(rèn)的合并方式是inner(取交集),列名完全相同時(shí)取交集合并的結(jié)果是空DataFrame。

          原理如下:

          其實(shí),此時(shí)合并的原理也是按列合并,特殊的是兩個(gè)DataFrame中列名完全一樣,且沒有指定on參數(shù)。merge()方法自動(dòng)將所有列同時(shí)作為連接列,合并時(shí)取并集,所有的連接列在結(jié)果中都返回了,得到的效果就與按行合并一樣。(理解how參數(shù)和on參數(shù)后就會(huì)明白,下文馬上介紹)。


          連接方式




          how: 指定合并時(shí)使用的連接方式,連接方式有四種,默認(rèn)為inner。

          inner內(nèi)連取key列的交集
          outer外連取key列的并集
          left左連使用左邊df的key列
          right右連使用右邊df的key列


          指定連接的列




          on: 指定合并時(shí)用于連接(外連,內(nèi)連,左連,右連)的列。默認(rèn)為None,merge()方法自動(dòng)識(shí)別兩個(gè)DataFrame中名字相同的列,作為連接的列,如本文前面的例子中沒有指定on參數(shù),也自動(dòng)識(shí)別了相同的列作為連接列。

          合并時(shí),先找到兩個(gè)DataFrame中的連接列key,然后將第一個(gè)DataFrame中key列的每個(gè)值依次與第二個(gè)DataFrame中的key列進(jìn)行匹配,匹配到一次結(jié)果中就會(huì)有一行數(shù)據(jù)。上面的left和right中key列都是k0~k2,k0~k2分別匹配到一次,共匹配三次,所以結(jié)果有三行。假如將k0~k2都改成k,則left中的每一個(gè)k可以與right中的k匹配到三次(many_to_many,后面會(huì)介紹),共匹配9次,結(jié)果會(huì)有9行。

          on參數(shù)指定的列必須在兩個(gè)被合并DataFrame中都有,否則會(huì)報(bào)錯(cuò)。

          on參數(shù)也可以指定多列,合并時(shí)按多個(gè)列進(jìn)行連接。


          在合并時(shí),只有多個(gè)列的值同時(shí)相等,兩個(gè)DataFrame才會(huì)匹配上。上面的例子中,用于連接的列是key1,key2,k0,k0在兩個(gè)DataFrame中都有,匹配到一次,k1,k1匹配到兩次,k2,k2和k2,k3等都沒有匹配成功,所以結(jié)果為三行(默認(rèn)合并方式為inner)。

          原理如下:


          兩個(gè)DataFrame分別指定連接列



          使用on參數(shù)時(shí),指定的列必須在兩個(gè)DataFrame中都有。merge()方法也支持兩個(gè)DataFrame分別指定連接的列,此時(shí)不要求指定列在兩個(gè)DataFrame中都有。


          left_on: 指定第一個(gè)DataFrame中用于連接的列,默認(rèn)為None。

          right_on: 指定第二個(gè)DataFrame中用于連接的列,默認(rèn)為None。

          當(dāng)left_on和right_on都指定一樣的列時(shí),與用on參數(shù)的結(jié)果一樣。如果left_on和right_on指定不同的列,可能因?yàn)檫B接列的值匹配不上,結(jié)果是一個(gè)空DataFrame,將連接方式改成outer后才能得到非空的DataFrame。


          left_on和right_on也可以指定一個(gè)array數(shù)組,長(zhǎng)度與DataFrame中的列長(zhǎng)度相等,連接原理不變。


          left_index: 設(shè)置第一個(gè)DataFrame用行索引進(jìn)行連接,默認(rèn)為False。

          right_index: 設(shè)置第二個(gè)DataFrame用行索引進(jìn)行連接,默認(rèn)為False。

          left_on和right_on可以與left_index和right_index混合使用,當(dāng)指定了其中一個(gè)DataFrame的連接列時(shí),必須同時(shí)指定另一個(gè)DataFrame的連接列,否則會(huì)報(bào)錯(cuò)。兩個(gè)DataFrame都有兩種方式指定連接列,所以組合的方式有四種。

          DataFrameleftright

          四種指定連接列的組合

          left_onright_on
          left_indexright_index
          left_onright_index
          left_indexright_on


          自定義相同列名的后綴




          suffixes: 當(dāng)被合并的兩個(gè)DataFrame中有相同的列名時(shí),會(huì)給列名拼接后綴以作區(qū)分,默認(rèn)為('_x', '_y')。可以修改suffixes參數(shù)進(jìn)行設(shè)置,傳入長(zhǎng)度為2的字符串元組。


          連接列是否存在DataFrame中




          indicator: 在結(jié)果中增加一列,顯示連接列是否存在于兩個(gè)DataFrame中。indicator默認(rèn)為False,如果修改為True,會(huì)增加一列,增加的列名默認(rèn)為_merge。

          給indicator參數(shù)指定一個(gè)值,則將這個(gè)值作為新增列的列名。在新增的列中,如果連接列同時(shí)存在于兩個(gè)DataFrame中,則對(duì)應(yīng)的值為both,如果連接列只存在其中一個(gè)DataFrame中,則對(duì)應(yīng)的值為left_only或right_only。


          連接列的對(duì)應(yīng)關(guān)系




          validate: 用于指定兩個(gè)DataFrame連接列的對(duì)應(yīng)關(guān)系,有one_to_one(一對(duì)一),one_to_many(一對(duì)多),many_to_one(多對(duì)一),many_to_many(多對(duì)多)四種對(duì)應(yīng)方式。默認(rèn)為None,merge()方法自動(dòng)根據(jù)兩個(gè)DataFrame的連接列采用適合的對(duì)應(yīng)方式。

          one_to_one: 檢查兩個(gè)DataFrame中的連接列,值必須唯一。

          one_to_many: 檢查第一個(gè)DataFrame中的連接列,值必須唯一。

          many_to_one: 檢查第二個(gè)DataFrame中的連接列,值必須唯一。

          many_to_many: 兩個(gè)DataFrame連接列中的值都可以不唯一。


          使用多對(duì)多的對(duì)應(yīng)方式,任何情況都滿足,合并不會(huì)報(bào)錯(cuò)。而使用其他三種方式時(shí),如果one對(duì)應(yīng)的DataFrame中連接列的值不唯一,會(huì)報(bào)錯(cuò)。所以,在對(duì)數(shù)據(jù)不夠了解、也沒有特別的對(duì)應(yīng)要求時(shí),不用指定validate參數(shù)。

          以上就是Pandas合并方法merge()的介紹,本文都是以DataFrame為例,Series合并以及Series與DataFrame合并的原理相似。

          如果需要本文代碼,可以點(diǎn)擊關(guān)注公眾號(hào)“Python碎片”,然后在后臺(tái)回復(fù)“pandas13”關(guān)鍵字獲取完整代碼。

          瀏覽 129
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  91AV天堂| 亚洲精品456在线播放 | 看一级一级黄色免费视频 | 黄色视频免费收看黄色视频免费收看 | 操逼、com |