1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        搞懂Pandas數據合并,這一篇就夠了!

        共 5325字,需瀏覽 11分鐘

         ·

        2022-04-20 19:55

        ↑?關注 + 星標?,每天學Python新技能

        后臺回復【大禮包】送你Python自學大禮包

        數據合并是數據處理過程中的必經環(huán)節(jié),pandas作為數據分析的利器,提供了四種常用的數據合并方式(concat,merge,append,join),讓我們看看如何使用這些方法吧!

        1.concat()

        concat() 可用于兩個及多個 DataFrame 間行/列方向進行內聯(lián)或外聯(lián)拼接操作,默認對行(沿 y 軸)取并集。

        「使用方式」

        pd.concat(
        ????objs:?Union[Iterable[~FrameOrSeries],?Mapping[Union[Hashable,?NoneType],?~FrameOrSeries]],
        ????axis=0,
        ????join='outer',
        ????ignore_index:?bool?=?False,
        ????keys=None,
        ????levels=None,
        ????names=None,
        ????verify_integrity:?bool?=?False,
        ????sort:?bool?=?False,
        ????copy:?bool?=?True,
        )

        「主要參數」

        • objs:一個序列或是Series,DataFrame對象的映射。
        • axis:連接的軸,0('index',行),1('columns',列),默認為0。
        • join:連接方式 ,inner(交集), outer(并集),默認為outer。
        • ignore_index:是否重置串聯(lián)軸的索引值。如果為True,則重置索引為0,…, n - 1。
        • keys:創(chuàng)建層次化索引。可以是任意值的列表或數組、元組數組、數組列表(如果將levels設置成多級數組的話)
        • names:生成的分層索引中級別的名稱。

        示例

        創(chuàng)建兩個 DataFrame。

        df1?=?pd.DataFrame(
        ??????????{'char':?['a',?'b'],
        ???????????'num':?[1,?2]})
        df2?=?pd.DataFrame(
        ??????????{'char':?['b',?'c'],
        ???????????'num':?[3,?4]})

        concat() 默認會對行方向進行拼接操作,連接方式 outer

        pd.concat([d1,?d2])

        清除現(xiàn)有索引并重置索引。

        pd.concat(
        ????[d1,?d2],
        ????ignore_index=True)

        通過 keys 參數在數據的最外層添加分層索引。

        pd.concat(
        ????[d1,?d2],
        ????keys=['d1',?'d2'])

        指定 names 參數來標記創(chuàng)建的索引鍵。

        pd.concat(
        ????[d1,?d1],
        ????keys=['d1',?'d2'],
        ????names=['DF?Name',?'Row?ID'])

        將兩個 DataFrame 與重疊的列進行組合并返回所有內容。交集外的列填充 NaN。

        df3?=?pd.DataFrame(
        ??????????{'char':?['b',?'c'],
        ??????????'float':?[3.0,?4.0]})
        pd.concat([df1,?df3])

        將兩個 DataFrame 與重疊的列進行組合,只返回重疊列的內容。

        pd.concat(
        ????[df1,?df3],
        ????join="inner")

        指定 axis=1 沿 x 軸水平組合 DataFrame 對象。

        df4?=?pd.DataFrame(
        ??????????{'char':?['b',?'c',?'d'],
        ???????????'num':?[3,?4,?5]},
        ???????????index=range(1,?4))
        pd.concat([df1,?df4],?axis=1)

        2.merge()

        merge() 只能用于兩個 DataFrame 間列方向進行內聯(lián)或外聯(lián)合并操作,默認列合并(沿 x 軸),取交集(即:以兩個 DataFrame 列名的交集作為連接鍵)

        「使用方式」

        pd.merge(
        ????left,
        ????right,
        ????how:?str?=?'inner',
        ????on=None,
        ????left_on=None,
        ????right_on=None,
        ????left_index:?bool?=?False,
        ????right_index:?bool?=?False,
        ????sort:?bool?=?False,
        ????suffixes=('_x',?'_y'),
        ????copy:?bool?=?True,
        ????indicator:?bool?=?False,
        ????validate=None,
        )

        「參數」

        • left:DataFrame
        • right:DataFrame 或者帶有 name 的Series
        • how:{'left', 'right', 'outer', 'inner'}, 默認為 'inner',連接的方式
        • on:用于連接的列索引名稱,必須同時存在于左、右兩個DataFrame中,默認是以兩個DataFrame列名的交集作為連接鍵。
        • left_on:左側DataFrame中用于連接鍵的列名,這個參數在左右列名不同但代表的含義相同時非常有用;
        • right_on:右側DataFrame中用于連接鍵的列名
        • left_index:默認為False,不使用左側DataFrame中的行索引作為連接鍵(但是這種情況下最好用JOIN)
        • right_index:默認為False,不使用右側DataFrame中的行索引作為連接鍵( 但是這種情況下最好用JOIN)
        • sort:默認為False,將合并的數據進行排序,設置為False可以提高性能
        • suffixes:字符串值組成的元組,用于指定當左右DataFrame存在相同列名時在列名后面附加的后綴名稱,默認為(’_x’, ‘_y’)
        • copy:默認為True,總是將數據復制到數據結構中,設置為False可以提高性能
        • indicator:顯示合并數據中數據的來源情況
        • validate:{"one_to_one" or "1:1", "one_to_many" or "1:m", "many_to_one" or "m:1", "many_to_many" or "m:m"}如果指定,則檢查合并是否為指定類型。

        示例

        創(chuàng)建兩個DataFrame。

        df1?=?pd.DataFrame(
        ??????????{'name':?['A1',?'B1',?'C1'],
        ???????????'grade':?[60,?70,?80]})
        df2?=?pd.DataFrame(
        ??????????{'name':?['B1',?'C1',?'D1'],
        ???????????'grade':?[70,?80,?100]})

        merge() 默認情況下,會根據兩個 DataFrame 中同時存在的列進行合并,合并方法采用取交集的方式。

        df1.merge(df2)

        指定合并的方式為 outer,取并集。

        df1.merge(df2,?how='outer')

        下面再創(chuàng)建兩個 DataFrame

        df1?=?pd.DataFrame(
        ??????{'name1':?['A1',?'B1',?'B1',?'C1'],
        ???????'grade':?[60,?70,?80,?90]})
        df2?=?pd.DataFrame(
        ??????{'name2':?['B1',?'C1',?'D1',?'E1'],
        ???????'grade':?[70,?80,?90,?100]})

        根據 name1name2 列合并 df1df2。grade 列附加了默認后綴 _x_y

        df1.merge(
        ????df2,
        ????left_on='name1',
        ????right_on='name2')

        合并 df1df2,并將指定的左右后綴附加到重疊列末尾。

        df1.merge(
        ????df2,
        ????left_on='name1',
        ????right_on='name2',
        ????suffixes=('_1',?'_2'))

        3.append()

        append() 可用于兩個及多個 DataFrame 間行方向(沿 y 軸)的拼接操作,默認取并集。

        「使用方式」

        df1.append(
        ????other,
        ????ignore_index=False,
        ????verify_integrity=False,
        ????sort=False)

        「參數」

        • other : 指定要添加的數據。DataFrame 或 Series 對象,或這些對象的列表
        • ignore_index: 是否忽略索引,如果為 True,軸將被重置為 0, 1, ..., n - 1。默認為False
        • verify_integrity:如果為 True,則在創(chuàng)建具有重復項的索引時引發(fā) ValueError。默認為 False
        • sort : 如果 df1 和 other 的列未對齊,則對列進行排序。默認為 False。

        示例

        創(chuàng)建兩個 DataFrame。

        df1?=?pd.DataFrame(
        ??????????[[1,?2],?[3,?4]],
        ??????????columns=list('AB'))
        df2?=?pd.DataFrame(
        ??????????[[5,?6],?[7,?8]],
        ??????????columns=list('BC'))

        append() 在默認情況下會沿y軸垂直拼接兩個 DataFrame ,df1df2 交集外的列填充 NaN。

        df1.append(df2)

        ignore_index 設置為 True,來達到重置軸的索引。

        df1.append(df2,?ignore_index=True)

        4.join()

        join() 用于兩個及多個 DataFrame 間列方向(沿 x 軸)的拼接操作,默認左拼接。

        「使用方式」

        df1.join(
        ????other,
        ????on=None,
        ????how='left',
        ????lsuffix='',
        ????rsuffix='',
        ????sort=False)
        • other:指定要添加的數據。DataFrame 或 Series 對象,或這些對象的列表
        • on:連接的列,默認使用索引連接
        • how:{'left', 'right', 'outer', 'inner'}, 默認為 'left',連接的方式
        • lsuffix:默認為空字符串,表示df1中重復列的后綴
        • rsuffix:other中重復列的后綴
        • sort:按照字典順序對結果在連接鍵上排序。如果為False,連接鍵的順序取決于連接類型(關鍵字)。

        示例

        創(chuàng)建兩個 DataFrame

        df1?=?pd.DataFrame(
        ??????????{'A':?['A0',?'A1',?'A2',?'A3',?'A4'],
        ??????????'val':?['V0',?'V1',?'V2',?'V3',?'V4']})
        df2?=?pd.DataFrame(
        ??????????{'B':?['B3',?'B4',?'B5'],
        ??????????'val':?['V3',?'V4',?'V5']})

        如果我們想使用 val 列進行連接,我們需要將 val 設置為 df1df2 中的索引。

        df1.set_index('val').join(
        ????df2.set_index('val'))

        使用 val 列連接的另一個方法是指定 on 參數。df1.join 只能使用 df2 的索引,但可以使用 df1 中的任何列。所以可以只將 df2 中的 val 列轉為索引,并通過 on 參數指定 df1 的連接列為 val。

        df1.join(
        ????df2.set_index('val'),
        ????on='val')

        使用外連接的方式連接 df1,df2

        df1.join(
        ????df2.set_index('val'),
        ????on='val',
        ????how='outer')

        四種方法總結

        • concat() 可沿任意軸連接 Pandas 對象,并且可在串聯(lián)軸上添加一層分層索引
        • join() 主要用于基于行索引進行列的拼接
        • merge() 使用數據庫樣式的連接合并,連接是基于列或索引。
        • 一般情況下 append(), join() 可以看成是 concat()merge()的簡易版,參數較少,易用性比較強。
        不同的方式適用于不同的場景,實踐是加深記憶的最快!

        碼字不易!你的「點贊」、「分享」「在看」、「收藏」是對我最大的支持!



        1. 太贊了!將Python代碼轉化為可執(zhí)行的程序

        2. 離線識別率高達99%的Python人臉識別系統(tǒng),開源~

        3. 驚呆了!小姐姐用圖解 Python,這也太秀了吧?



        瀏覽 84
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            女free性zozo交体人内谢 | 麻豆一区二区三区 | 男人把女人捅到爽 | 久久九九99 | 91人妻日韩人妻无码专区精品 | 做爱综合网 | 涩涩av| 男人和女人尻逼 | 强奸一区二区三区 | 第一页亚洲 |