欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

一文搞懂Python中Pandas數(shù)據(jù)合并

 更新時(shí)間:2021年11月26日 08:34:30   作者:Dream丶Killer  
pandas是基于NumPy的一種工具,該工具是為了解決數(shù)據(jù)分析任務(wù)而創(chuàng)建的。Pandas納入了大量庫(kù)和一些標(biāo)準(zhǔn)的數(shù)據(jù)模型,提供了高效操作大型數(shù)據(jù)集的工具。pandas提供大量快速便捷地處理數(shù)據(jù)的函數(shù)和方法。你很快就會(huì)發(fā)現(xiàn),它是使Python強(qiáng)大而高效的數(shù)據(jù)分析環(huán)境的重要因素之一

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

1.concat()

concat() 可用于兩個(gè)及多個(gè) DataFrame 間行/列方向進(jìn)行內(nèi)聯(lián)或外聯(lián)拼接操作,默認(rèn)對(duì)行(沿 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:一個(gè)序列或是Series,DataFrame對(duì)象的映射。
  • 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è)置成多級(jí)數(shù)組的話)
  • names:生成的分層索引中級(jí)別的名稱。

示例

創(chuàng)建兩個(gè) DataFrame。

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

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

pd.concat([d1, d2])

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

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

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

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

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

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

image-20211123175639564

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

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

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

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

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

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

2.merge()

merge() 只能用于兩個(gè) DataFrame 間列方向進(jìn)行內(nèi)聯(lián)或外聯(lián)合并操作,默認(rèn)列合并(沿 x 軸),取交集(即:以兩個(gè) 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:用于連接的列索引名稱,必須同時(shí)存在于左、右兩個(gè)DataFrame中,默認(rèn)是以兩個(gè)DataFrame列名的交集作為連接鍵。
  • left_on:左側(cè)DataFrame中用于連接鍵的列名,這個(gè)參數(shù)在左右列名不同但代表的含義相同時(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存在相同列名時(shí)在列名后面附加的后綴名稱,默認(rèn)為('_x', ‘_y')
  • copy:默認(rèn)為True,總是將數(shù)據(jù)復(fù)制到數(shù)據(jù)結(jié)構(gòu)中,設(shè)置為False可以提高性能
  • indicator:顯示合并數(shù)據(jù)中數(shù)據(jù)的來(lái)源情況
  • 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)建兩個(gè)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)情況下,會(huì)根據(jù)兩個(gè) DataFrame 中同時(shí)存在的列進(jìn)行合并,合并方法采用取交集的方式。

df1.merge(df2)

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

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

下面再創(chuàng)建兩個(gè) 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 列合并 df1df2。 grade 列附加了默認(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() 可用于兩個(gè)及多個(gè) DataFrame 間行方向(沿 y 軸)的拼接操作,默認(rèn)取并集。

使用方式

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

參數(shù)

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

示例

創(chuàng)建兩個(gè) DataFrame

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

append() 在默認(rèn)情況下會(huì)沿y軸垂直拼接兩個(gè) DataFrame ,df1,df2 交集外的列填充 NaN

df1.append(df2)

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

df1.append(df2, ignore_index=True)

4.join()

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

使用方式

df1.join(
    other,
    on=None,
    how='left',
    lsuffix='',
    rsuffix='',
    sort=False)
  • other:指定要添加的數(shù)據(jù)。DataFrame 或 Series 對(duì)象,或這些對(duì)象的列表
  • 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)建兩個(gè) 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 列連接的另一個(gè)方法是指定 on 參數(shù)。 df1.join 只能使用 df2 的索引,但可以使用 df1 中的任何列。所以可以只將 df2 中的 val 列轉(zhuǎn)為索引,并通過(guò) 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 對(duì)象,并且可在串聯(lián)軸上添加一層分層索引join() 主要用于基于行索引進(jìn)行列的拼接merge() 使用數(shù)據(jù)庫(kù)樣式的連接合并,連接是基于列或索引。一般情況下 append(), join() 可以看成是 concat()merge()的簡(jiǎn)易版,參數(shù)較少,易用性比較強(qiáng)。

到此這篇關(guān)于一文搞懂Python中Pandas數(shù)據(jù)合并的文章就介紹到這了,更多相關(guān)Python Pandas 數(shù)據(jù)合并內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python進(jìn)程間的通信一起來(lái)了解下

    Python進(jìn)程間的通信一起來(lái)了解下

    這篇文章主要為大家詳細(xì)介紹了Python進(jìn)程間通信,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03
  • 解決tensorflow 釋放圖,刪除變量問(wèn)題

    解決tensorflow 釋放圖,刪除變量問(wèn)題

    這篇文章主要介紹了解決tensorflow 釋放圖,刪除變量問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-06-06
  • python?pip安裝庫(kù)下載源更換(清華源、阿里源、中科大源、豆瓣源)

    python?pip安裝庫(kù)下載源更換(清華源、阿里源、中科大源、豆瓣源)

    為了提高Python包的下載速度和穩(wěn)定性,可以配置國(guó)內(nèi)的鏡像源,如清華源、阿里源、中科大源和豆瓣源,設(shè)置方法簡(jiǎn)單,只需更改pip的配置文件或使用命令行即可,需要的朋友可以參考下
    2024-10-10
  • python中dict獲取關(guān)鍵字與值的實(shí)現(xiàn)

    python中dict獲取關(guān)鍵字與值的實(shí)現(xiàn)

    這篇文章主要介紹了python中dict獲取關(guān)鍵字與值的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • python看某個(gè)模塊的版本方法

    python看某個(gè)模塊的版本方法

    今天小編就為大家分享一篇python看某個(gè)模塊的版本方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-10-10
  • Python常見MongoDB數(shù)據(jù)庫(kù)操作實(shí)例總結(jié)

    Python常見MongoDB數(shù)據(jù)庫(kù)操作實(shí)例總結(jié)

    這篇文章主要介紹了Python常見MongoDB數(shù)據(jù)庫(kù)操作,結(jié)合實(shí)例形式詳細(xì)總結(jié)了Python針對(duì)MongoDB數(shù)據(jù)庫(kù)相關(guān)pymongo庫(kù)安裝以及MongoDB數(shù)據(jù)庫(kù)的增刪改查等相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2018-07-07
  • Python 的第三方調(diào)試庫(kù) ???pysnooper?? 使用示例

    Python 的第三方調(diào)試庫(kù) ???pysnooper?? 使用示例

    這篇文章主要介紹了Python 的第三方調(diào)試庫(kù) ???pysnooper?? 使用示例的相關(guān)資料,需要的朋友可以參考下
    2023-02-02
  • pytorch中nn.Flatten()函數(shù)詳解及示例

    pytorch中nn.Flatten()函數(shù)詳解及示例

    nn.Flatten是一個(gè)類,而torch.flatten()則是一個(gè)函數(shù),下面這篇文章主要給大家介紹了關(guān)于pytorch中nn.Flatten()函數(shù)詳解及示例的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • Python入門之后再看點(diǎn)什么好?

    Python入門之后再看點(diǎn)什么好?

    看完了基礎(chǔ)書,甚至看兩遍了,但自己寫的時(shí)候還是沒(méi)思路,我該怎么辦?這篇文章主要介紹了Python入門之后再看點(diǎn)什么好,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • pycharm配置pyqt5-tools開發(fā)環(huán)境的方法步驟

    pycharm配置pyqt5-tools開發(fā)環(huán)境的方法步驟

    這篇文章主要介紹了pycharm配置pyqt5-tools開發(fā)環(huán)境的方法步驟,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-02-02

最新評(píng)論