<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ù)-concat()

          共 5350字,需瀏覽 11分鐘

           ·

          2022-01-24 08:52

          在數(shù)據(jù)處理過程中,經(jīng)常會(huì)遇到多個(gè)表進(jìn)行拼接合并的需求,在Pandas中有多個(gè)拼接合并的方法,每種方法都有自己擅長的拼接方式,本文對pd.concat()進(jìn)行詳細(xì)講解,希望對你有幫助。pd.concat()函數(shù)可以沿著指定的軸將多個(gè)dataframe或者series拼接到一起,這一點(diǎn)和另一個(gè)常用的pd.merge()函數(shù)不同,pd.merge()解決數(shù)據(jù)庫樣式的左右拼接,不能解決上下拼接。


          一、基本語法

          pd.concat(     objs,           axis=0,          join='outer',??? ?ignore_index=False,  ? ?keys=None,???????   ?levels=None,??????  ??names=None,???????  ??verify_integrity=False,????????  copy=True)

          二、參數(shù)含義

          • objs:Series,DataFrame或Panel對象的序列或映射,如果傳遞了dict,則排序的鍵將用作鍵參數(shù)
          • axis:{0,1,...},默認(rèn)為0,也就是縱向上進(jìn)行合并。沿著連接的軸。
          • join:{'inner','outer'},默認(rèn)為“outer”。如何處理其他軸上的索引。outer為聯(lián)合和inner為交集。
          • ignore_index:boolean,default False。如果為True,請不要使用并置軸上的索引值。結(jié)果軸將被標(biāo)記為0,...,n-1。如果要連接其中并置軸沒有有意義的索引信息的對象,這將非常有用。注意,其他軸上的索引值在連接中仍然受到尊重。
          • keys:序列,默認(rèn)值無。使用傳遞的鍵作為最外層構(gòu)建層次索引。如果為多索引,應(yīng)該使用元組。
          • levels:序列列表,默認(rèn)值無。用于構(gòu)建MultiIndex的特定級別(唯一值)。否則,它們將從鍵推斷。
          • names:list,default無。結(jié)果層次索引中的級別的名稱。
          • verify_integrity:boolean,default False。檢查新連接的軸是否包含重復(fù)項(xiàng)。這相對于實(shí)際的數(shù)據(jù)串聯(lián)可能是非常昂貴的。
          • copy:boolean,default True。如果為False,請勿不必要地復(fù)制數(shù)據(jù)。
          ?

          三、豎向堆疊

          #構(gòu)建需要的數(shù)據(jù)表
          import pandas as pddf1 = pd.DataFrame({'A':['A{}'.format(i) for i in range(0,4)],                    'B':['B{}'.format(i) for i in range(0,4)],                    'C':['C{}'.format(i) for i in range(0,4)]                 })
          df2 = pd.DataFrame({'A':['A{}'.format(i) for i in range(4,8)], 'B':['B{}'.format(i) for i in range(4,8)], 'C':['C{}'.format(i) for i in range(4,8)] })df3 = pd.DataFrame({'A':['A{}'.format(i) for i in range(8,12)], 'B':['B{}'.format(i) for i in range(8,12)], 'C':['C{}'.format(i) for i in range(8,12)] })
          現(xiàn)將表構(gòu)成list,然后在作為concat的輸入
          frames = [df1, df2, df3]result = pd.concat(frames) A    B    C0   A0   B0   C01   A1   B1   C12   A2   B2   C23   A3   B3   C30   A4   B4   C41   A5   B5   C52   A6   B6   C63   A7   B7   C70   A8   B8   C81   A9   B9   C92  A10  B10  C103  A11  B11  C11

          傳入也可以是字典
          frames = {'df1':df1, 'df2':df2,'df3':df3}result = pd.concat(frames)   A    B    Cdf1 0   A0   B0   C0    1   A1   B1   C1    2   A2   B2   C2    3   A3   B3   C3df2 0   A4   B4   C4    1   A5   B5   C5    2   A6   B6   C6    3   A7   B7   C7df3 0   A8   B8   C8    1   A9   B9   C9    2  A10  B10  C10    3  A11  B11  C11

          三、橫向拼接

          1、axis

          當(dāng)axis = 1的時(shí)候,concat就是行對齊,然后將不同列名稱的兩張表合并
          #再構(gòu)建一個(gè)表df4 = pd.DataFrame({'C':['C{}'.format(i) for i in range(3,9)],                    'E':['E{}'.format(i) for i in range(3,9)],                    'F':['F{}'.format(i) for i in range(3,9)]                 })pd.concat([df1,df4], axis=1)     A    B    C   C   E   F0   A0   B0   C0  C3  E3  F31   A1   B1   C1  C4  E4  F42   A2   B2   C2  C5  E5  F53   A3   B3   C3  C6  E6  F64  NaN  NaN  NaN  C7  E7  F75  NaN  NaN  NaN  C8  E8  F8

          2、join

          加上join參數(shù)的屬性,如果為'inner'得到的是兩表的交集,如果是outer,得到的是兩表的并集。
          #  join='inner' 取交集pd.concat([df1, df4], axis=1, join='inner')    A   B   C   C   E   F0  A0  B0  C0  C3  E3  F31  A1  B1  C1  C4  E4  F42  A2  B2  C2  C5  E5  F53  A3  B3  C3  C6  E6  F6
          # join='outer' 和 默認(rèn)值相同pd.concat([df1, df4], axis=1, join='outer') A B C C E F0 A0 B0 C0 C3 E3 F31 A1 B1 C1 C4 E4 F42 A2 B2 C2 C5 E5 F53 A3 B3 C3 C6 E6 F64 NaN NaN NaN C7 E7 F75 NaN NaN NaN C8 E8 F8

          四、對比append方法
          append是series和dataframe的方法,使用它就是默認(rèn)沿著列進(jìn)行憑借(axis = 0,列對齊)
          df1.append(df2)    A   B   C0  A0  B0  C01  A1  B1  C12  A2  B2  C23  A3  B3  C30  A4  B4  C41  A5  B5  C52  A6  B6  C63  A7  B7  C7

          五、忽略index
          如果兩個(gè)表的index都沒有實(shí)際含義,使用ignore_index參數(shù),置true,合并的兩個(gè)表就睡根據(jù)列字段對齊,然后合并。最后再重新整理一個(gè)新的index。?
          pd.concat([df1, df4], axis=1, ignore_index=True)     0    1    2   3   4   50   A0   B0   C0  C3  E3  F31   A1   B1   C1  C4  E4  F42   A2   B2   C2  C5  E5  F53   A3   B3   C3  C6  E6  F64  NaN  NaN  NaN  C7  E7  F75  NaN  NaN  NaN  C8  E8  F8

          六、增加區(qū)分組鍵
          前面提到的keys參數(shù)可以用來給合并后的表增加key來區(qū)分不同的表數(shù)據(jù)來源

          1、可以直接用key參數(shù)實(shí)現(xiàn)

          pd.concat([df1,df2,df3], keys=['x', 'y', 'z']) A    B    Cx 0   A0   B0   C0  1   A1   B1   C1  2   A2   B2   C2  3   A3   B3   C3y 0   A4   B4   C4  1   A5   B5   C5  2   A6   B6   C6  3   A7   B7   C7z 0   A8   B8   C8  1   A9   B9   C9  2  A10  B10  C10  3  A11  B11  C11

          2、傳入字典來增加分組鍵

          frames = {'df1':df1, 'df2':df2,'df3':df3}result = pd.concat(frames)   A    B    Cdf1 0   A0   B0   C0    1   A1   B1   C1    2   A2   B2   C2    3   A3   B3   C3df2 0   A4   B4   C4    1   A5   B5   C5    2   A6   B6   C6    3   A7   B7   C7df3 0   A8   B8   C8    1   A9   B9   C9    2  A10  B10  C10????3??A11??B11??C11

          七、加入新的行

          1、列字段相同的加入

          append方法可以將 series 和 字典就夠的數(shù)據(jù)作為dataframe的新一行插入。?
          s2 = pd.Series(['X0', 'X1', 'X2', 'X3'], index=['A', 'B', 'C', 'D'])df1.append(s2, ignore_index=True) A B C D0 A0 B0 C0 NaN1 A1 B1 C1 NaN2 A2 B2 C2 NaN3 A3 B3 C3 NaN4 X0 X1 X2 X3

          2、列字段不同的加入

          如果遇到兩張表的列字段本來就不一樣,但又想將兩個(gè)表合并,其中無效的值用nan來表示。那么可以使用ignore_index來實(shí)現(xiàn)。
          dicts = [{'A': 1, 'B': 2, 'C': 3, 'X': 4}, {'A': 5, 'B': 6, 'C': 7, 'Y': 8}]df1.append(dicts, ignore_index=True) A B C X Y0 A0 B0 C0 NaN NaN1 A1 B1 C1 NaN NaN2 A2 B2 C2 NaN NaN3 A3 B3 C3 NaN NaN4 1 2 3 4.0 NaN5 5 6 7 NaN 8.0
          ···? END? ···
          關(guān)聯(lián)閱讀:
          Pandas中的寶藏函數(shù)-transform()

          Pandas中的寶藏函數(shù)-map

          Pandas中的寶藏函數(shù)-apply

          Pandas中的寶藏函數(shù)-applymap

          Pandas中的寶藏函數(shù)-agg()

          Pandas中的寶藏函數(shù)-rank()

          一文搞懂Pandas數(shù)據(jù)排序

          Pandas缺失值處理-判斷和刪除

          一網(wǎng)打盡Pandas中的各種索引 iloc,loc,ix,iat,at,直接索引


          掃描關(guān)注本號↓
          瀏覽 52
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

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

          手機(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>
                  国产农村XXXX做受 | 爱情岛论坛www成人网站 | 日本丁香婷婷五月天色电 | 天天摸天天操天天爽 | 国产三级日韩三级欧美三级 |