<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)-連接操作concat

          共 2142字,需瀏覽 5分鐘

           ·

          2021-06-05 11:46

          Pandas提供了多種將Series、DataFrame對(duì)象合并的功能,有concat(), merge(), append(), join()等。這些方法都可以將多個(gè)Series或DataFrame組合到一起,返回一個(gè)新的Series或DataFrame。每個(gè)方法在用法上各有特點(diǎn),可以適用于不同的場(chǎng)景,本系列會(huì)逐一進(jìn)行介紹。


          concat是英文單詞concatenate(連接)的縮寫,concat()方法用于將Series或DataFrame連接到一起,達(dá)到組合的功能,本文介紹concat()方法的具體用法。

          按行連接和按列連接



          將DataFrame連接時(shí),可以按行連接(縱向)也可以按列連接(橫向)。

          1. 按行連接



          先創(chuàng)建兩個(gè)DataFrame,然后連接。



          concat(): 將多個(gè)Series或DataFrame連接到一起,默認(rèn)為按行連接(axis參數(shù)默認(rèn)為0),結(jié)果的行數(shù)為被連接數(shù)據(jù)的行數(shù)之和。

          concat()的第一個(gè)參數(shù)通常傳入一個(gè)由Series或DataFrame組成的列表,表示將列表中的數(shù)據(jù)連接到一起,連接的順序與列表中的順序相同。也可以傳入一個(gè)字典,后面會(huì)介紹。

          結(jié)果的行索引是多個(gè)數(shù)據(jù)的行索引拼接的結(jié)果,如果有相等的行索引會(huì)重復(fù)多行。

          2. 按列連接



          axis: axis參數(shù)默認(rèn)為0('index'),如果將axis參數(shù)設(shè)置為1('columns'),則表示按列連接,結(jié)果的列數(shù)為被連接數(shù)據(jù)的列數(shù)之和。


          結(jié)果的列索引是多個(gè)數(shù)據(jù)的列索引拼接的結(jié)果,如果有相等的列索引會(huì)重復(fù)多列。


          連接基本原理解析



          上面兩個(gè)例子的連接原理如下。

          1. 按行連接



          2. 按列連接


          在這兩個(gè)例子中,按行連接時(shí),兩個(gè)DataFrame的列索引相同,按列連接時(shí),兩個(gè)DataFrame的行索引相同,所以結(jié)果看起來很直觀。

          3. 被連接數(shù)據(jù)的索引不同



          連接原理如下。


          這個(gè)例子中,兩個(gè)DataFrame的行索引和列索引都不相等,將它們按行連接時(shí),先將兩個(gè)DataFrame的行拼接起來,然后在每行中沒有數(shù)據(jù)的列填充空值。按列連接同理。

          根據(jù)上面的三個(gè)例子(例1~例3),可以總結(jié)連接的原理為(按行連接,按列同理):

          第一步,將數(shù)據(jù)按行拼接起來,如果有行索引相等的行,行索引會(huì)重復(fù)多行。

          第二步,檢索數(shù)據(jù)中的列索引,如果列索引相等,則結(jié)果兼容顯示在同一列(例1),如果列索引不相等,則分別顯示,無數(shù)據(jù)的位置填充空值(例3)。

          連接時(shí)取交集




          join: join參數(shù)默認(rèn)為outer,前面的三個(gè)例子中都是默認(rèn)取并集,如果將join參數(shù)設(shè)置為inner,則連接時(shí)取交集。

          按行連接時(shí),列取被連接數(shù)據(jù)的交集,只保留被連接數(shù)據(jù)中都有的列,原理如下。按列連接同理。


          按列連接時(shí)修改行索引




          按列連接時(shí),可以使用reindex()方法修改結(jié)果的行索引(按行連接時(shí)不支持)。

          如果取的是并集,修改行索引的過程為:先按取并集的方式連接,然后去掉結(jié)果中比修改的索引多出的行。

          如果取的是交集,修改行索引的過程為:先按取交集的方式連接,然后在結(jié)果中增加比修改的索引少的行,增加回的行中填充空值。

          重設(shè)結(jié)果的索引




          ignore_index: ignore_index參數(shù)默認(rèn)為False,結(jié)果的索引是被連接數(shù)據(jù)的索引(行索引和列索引)。將ignore_index修改為True,可以重設(shè)結(jié)果的行索引或列索引。

          按行連接時(shí),設(shè)置ignore_index為True,結(jié)果的行索引被重設(shè)為0開始的整數(shù)索引。按列連接時(shí),則列索引被重設(shè)。

          添加外層行索引




          keys: keys參數(shù)默認(rèn)為空,可以用keys參數(shù)給結(jié)果添加外層的行索引,使行索引變成多重行索引。也可以添加多層,如果添加多層行索引則用元組的方式傳入。

          前面提到concat()的第一個(gè)參數(shù)可以用字典的方式傳入,其效果與使用keys參數(shù)相同。

          給結(jié)果添加外層的行索引后,可以用添加的外層行索引將被連接數(shù)據(jù)取出。


          多重行索引添加值和命名




          levels: levels參數(shù)默認(rèn)為空。使用keys給結(jié)果添加外層行索引后,可以使用levels參數(shù)給外層索引添加更多的值,傳入一個(gè)嵌套的列表數(shù)據(jù)。對(duì)不是多重行索引的數(shù)據(jù),levels參數(shù)不支持,會(huì)報(bào)錯(cuò)。

          當(dāng)然,添加進(jìn)去的值在結(jié)果中不會(huì)顯示,因?yàn)闆]有對(duì)應(yīng)的數(shù)據(jù),這個(gè)功能基本上也不會(huì)使用。


          names: names參數(shù)默認(rèn)為空,多重行索引的命名為None。使用names參數(shù)可以給多重行索引命名,傳入一個(gè)列表,列表的長(zhǎng)度可以小于多重行索引的層數(shù),多出的層索引名默認(rèn)為None,列表的長(zhǎng)度不可以大于多重行索引的層數(shù),會(huì)報(bào)錯(cuò)。names參數(shù)對(duì)普通索引無效。

          以上就是Pandas連接操作concat()方法的介紹,本文都是以DataFrame為例,Series連接以及Series與DataFrame混合連接的原理都相同。

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


          瀏覽 111
          點(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>
                  无码一区二区区 | 亚洲二区在线观看 | 激情国产高清在线 | www.人妻 | 色妞干网 |