<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ù)據(jù)合并,這一篇就夠了!

          共 5325字,需瀏覽 11分鐘

           ·

          2022-04-20 19:55

          ↑?關(guān)注 + 星標(biāo)?,每天學(xué)Python新技能

          后臺回復(fù)【大禮包】送你Python自學(xué)大禮包

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

          1.concat()

          concat() 可用于兩個及多個 DataFrame 間行/列方向進(jìn)行內(nèi)聯(lián)或外聯(lián)拼接操作,默認(rè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,
          )

          「主要參數(shù)」

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

          示例

          創(chuàng)建兩個 DataFrame

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

          concat() 默認(rèn)會對行方向進(jìn)行拼接操作,連接方式 outer。

          pd.concat([d1,?d2])

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

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

          通過 keys 參數(shù)在數(shù)據(jù)的最外層添加分層索引。

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

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

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

          將兩個 DataFrame 與重疊的列進(jìn)行組合并返回所有內(nèi)容。交集外的列填充 NaN。

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

          將兩個 DataFrame 與重疊的列進(jìn)行組合,只返回重疊列的內(nèi)容。

          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 間列方向進(jìn)行內(nèi)聯(lián)或外聯(lián)合并操作,默認(rè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,
          )

          「參數(shù)」

          • left:DataFrame
          • right:DataFrame 或者帶有 name 的Series
          • how:{'left', 'right', 'outer', 'inner'}, 默認(rèn)為 'inner',連接的方式
          • on:用于連接的列索引名稱,必須同時存在于左、右兩個DataFrame中,默認(rèn)是以兩個DataFrame列名的交集作為連接鍵。
          • left_on:左側(cè)DataFrame中用于連接鍵的列名,這個參數(shù)在左右列名不同但代表的含義相同時非常有用;
          • right_on:右側(cè)DataFrame中用于連接鍵的列名
          • left_index:默認(rèn)為False,不使用左側(cè)DataFrame中的行索引作為連接鍵(但是這種情況下最好用JOIN)
          • right_index:默認(rèn)為False,不使用右側(cè)DataFrame中的行索引作為連接鍵( 但是這種情況下最好用JOIN)
          • sort:默認(rèn)為False,將合并的數(shù)據(jù)進(jìn)行排序,設(shè)置為False可以提高性能
          • suffixes:字符串值組成的元組,用于指定當(dāng)左右DataFrame存在相同列名時在列名后面附加的后綴名稱,默認(rèn)為(’_x’, ‘_y’)
          • copy:默認(rèn)為True,總是將數(shù)據(jù)復(fù)制到數(shù)據(jù)結(jié)構(gòu)中,設(shè)置為False可以提高性能
          • indicator:顯示合并數(shù)據(jù)中數(shù)據(jù)的來源情況
          • 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() 默認(rèn)情況下,會根據(jù)兩個 DataFrame 中同時存在的列進(jìn)行合并,合并方法采用取交集的方式。

          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]})

          根據(jù) name1name2 列合并 df1df2grade 列附加了默認(rèn)后綴 _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 軸)的拼接操作,默認(rèn)取并集。

          「使用方式」

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

          「參數(shù)」

          • other : 指定要添加的數(shù)據(jù)。DataFrame 或 Series 對象,或這些對象的列表
          • ignore_index: 是否忽略索引,如果為 True,軸將被重置為 0, 1, ..., n - 1。默認(rèn)為False
          • verify_integrity:如果為 True,則在創(chuàng)建具有重復(fù)項的索引時引發(fā) ValueError。默認(rèn)為 False
          • sort : 如果 df1 和 other 的列未對齊,則對列進(jìn)行排序。默認(rèn)為 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() 在默認(rèn)情況下會沿y軸垂直拼接兩個 DataFramedf1,df2 交集外的列填充 NaN。

          df1.append(df2)

          ignore_index 設(shè)置為 True,來達(dá)到重置軸的索引。

          df1.append(df2,?ignore_index=True)

          4.join()

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

          「使用方式」

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

          示例

          創(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 列進(jìn)行連接,我們需要將 val 設(shè)置為 df1df2 中的索引。

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

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

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

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

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

          四種方法總結(jié)

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

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



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

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

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



          瀏覽 84
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

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

          手機掃一掃分享

          分享
          舉報
          <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>
                  国产又黄又爽免费观看 | 影音先锋全部av鲁色资源站小说 | 欧美在线伦理一 | 高清无码做爱 | 草青青aV |