日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python之数据合并——【concat()函数、merge()函数、join()方法、combine_first()方法】

發布時間:2023/12/13 python 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python之数据合并——【concat()函数、merge()函数、join()方法、combine_first()方法】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 軸向堆疊數據——concat()函數
    • 橫向堆疊與外連接
    • 縱向堆疊與內連接
  • 主鍵合并數據——merge()函數
    • 內連接方式
    • 外連接方式
    • 左連接方式
    • 右連接方式
    • 其他
  • 根據行索引合并數據——join()方法
    • 四種連接方式
    • 行索引與列索引重疊
  • 合并重疊數據——combine_first()方法


軸向堆疊數據——concat()函數

pandas.concat(
objs: Union[
Iterable[FrameOrSeriesUnion], Mapping[Optional[Hashable], FrameOrSeriesUnion]
],
axis=0,
join=“outer”,
ignore_index: bool = False,
keys=None,
levels=None,
names=None,
verify_integrity: bool = False,
sort: bool = False,
copy: bool = True,
)

上述函數中常用參數表示的含義如下:

join:表示連接的方式,inner表示內連接,outer表示外連接,默認使用外連接。

ignore_index:接受布爾值,默認為False。如果設置為True,則表示清除現有索引并重置索引值。

keys:接受序列,表示添加最外層索引。

levels:用于構建MultiIndex的特定級別(唯一值)

names:在設置了keys和levels參數后,用于創建分層級別的名稱

verify_integerity:檢查新的連接軸是否包含重復項。接收布爾值,當設置為True時,如果有重復的軸將會拋出錯誤,默認為False


根據軸方向的不同(axis參數),可以將堆疊分成橫向堆疊和縱向堆疊默認采用的是縱向堆疊方式。在堆疊數據時,默認采用的是外連接,(join參數設為outer)的方式。

橫向堆疊與外連接

使用concat()函數合并時,若是將axis參數的值設為1,且join參數的值設為outer,則合并方式為橫向堆疊與外連接。

測試對象:

left:A B a A0 B0 b A1 B1 right:C D c C0 D0 d C1 D1

代碼:

left = pd.DataFrame({'A': ['A0', 'A1'],'B': ['B0', 'B1']},index=['a', 'b']) right = pd.DataFrame({'C': ['C0', 'C1'],'D': ['D0', 'D1']},index=['c', 'd']) print(pd.concat([left, right], join='outer', axis=1))

輸出結果:

A B C D a A0 B0 NaN NaN b A1 B1 NaN NaN c NaN NaN C0 D0 d NaN NaN C1 D1

使用concat()函數合并之后產生的不存在的數據將用NaN進行填充。


縱向堆疊與內連接

使用concat()函數合并時,若是將axis參數的值設為0,且join參數的值設為inner,則合并方式為縱向堆疊與內連接。

測試對象:

df1:A B C 0 A0 B0 C0 1 A1 B1 C1 2 A2 B2 C2 df2:B C D 0 B3 C3 D3 1 B4 C4 D4 2 B5 C5 D5

代碼:

df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2'],'B': ['B0', 'B1', 'B2'],'C': ['C0', 'C1', 'C2']}) df2 = pd.DataFrame({'B': ['B3', 'B4', 'B5'],'C': ['C3', 'C4', 'C5'],'D': ['D3', 'D4', 'D5']}) print(pd.concat([df1, df2], join='inner', axis=0))

輸出結果

B C 0 B0 C0 1 B1 C1 2 B2 C2 0 B3 C3 1 B4 C4 2 B5 C5

主鍵合并數據——merge()函數

主鍵合并根據一個多個鍵將不同的DaraFrame對象連接起來,大多數是將兩個DataFrame對象中重疊作為合并的鍵。

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對象
  • how:表示連接方式,默認為inner,該參數支持以下的取值:
    · left:使用左側的DataFrame的鍵,類似于SQL的左外連接
    · right:使用右側的DataFrame的鍵,類似于SQL的右外連接
    · outer:使用兩個DataFrame所有的鍵,類似于SQL的全連接
    · inner:使用兩個DataFrame鍵的交集,類似于SQL的內連接
  • on:用于連接的列名。必須存在于左右兩個DataFrame對象中
  • left_on:以左側的DataFrame作為連接鍵
  • right_on:以右側的DataFrame作為連接鍵
  • left_index:左側的行索引用作連接鍵
  • right_index:右側的行索引用作連接鍵
  • sort:是否排序,接受布爾值,默認為False
  • suffixes:用于追加都重疊列名的末尾,默認為(_x,_y)
  • 內連接方式

    默認采用how=inner的方式合并

    測試對象:

    df1:A B C 0 A0 B0 C0 1 A1 B1 C1 2 A2 B2 C2 df3:B C D 0 B0 C0 D3 1 B2 C2 D4 2 B4 C4 D5

    代碼:

    df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2'],'B': ['B0', 'B1', 'B2'],'C': ['C0', 'C1', 'C2']}) df3 = pd.DataFrame({'B': ['B0', 'B2', 'B4'],'C': ['C0', 'C2', 'C4'],'D': ['D3', 'D4', 'D5']}) print("pd.merge:\n", pd.merge(df1, df3, on=['B', 'C']))

    輸出結果:

    pd.merge:A B C D 0 A0 B0 C0 D3 1 A2 B2 C2 D4

    外連接方式

    外連接方式(how=outer):left與right列中相同的數據將會重疊,沒有數據的位置使用NaN進行填充。

    測試對象:

    df1:A B C 0 A0 B0 C0 1 A1 B1 C1 2 A2 B2 C2 df3:B C D 0 B0 C0 D3 1 B2 C2 D4 2 B4 C4 D5

    代碼:

    print("pd.merge(how=outer):\n", pd.merge(df1, df3, on=['B', 'C'], how='outer'))

    輸出結果:

    pd.merge(how=outer):A B C D 0 A0 B0 C0 D3 1 A1 B1 C1 NaN 2 A2 B2 C2 D4 3 NaN B4 C4 D5

    左連接方式

    左連接方式(how=left):以左表作為基準進行連接,left表中的數據會全部顯示,right表中只會顯示與重疊數據行索引值相同的數據,合并后表中缺失的數據會使用NaN進行填充。

    測試對象:

    df1:A B C 0 A0 B0 C0 1 A1 B1 C1 2 A2 B2 C2 df3:B C D 0 B0 C0 D3 1 B2 C2 D4 2 B4 C4 D5

    代碼:

    print("pd.merge(how=left):\n", pd.merge(df1, df3, on=['B', 'C'], how='left'))

    輸出結果:

    pd.merge(how=left):A B C D 0 A0 B0 C0 D3 1 A1 B1 C1 NaN 2 A2 B2 C2 D4

    右連接方式

    右連接方式(how=left):以右表作為基準進行連接,right表中的數據會全部顯示,left表中只會顯示與重疊數據行索引值相同的數據,合并后表中缺失的數據會使用NaN進行填充。

    測試對象:

    df1:A B C 0 A0 B0 C0 1 A1 B1 C1 2 A2 B2 C2 df3:B C D 0 B0 C0 D3 1 B2 C2 D4 2 B4 C4 D5

    代碼:

    print("pd.merge(how=right):\n", pd.merge(df1, df3, on=['B', 'C'], how='right'))

    測試結果:

    pd.merge(how=right):A B C D 0 A0 B0 C0 D3 1 A2 B2 C2 D4 2 NaN B4 C4 D5

    其他

    即使兩張表中的行索引與列索引均沒有重疊的部分,也可以使用merge()函數來合并。只需要將參數left_index和right_index的值設置為True即可。

    測試對象

    left:A B a A0 B0 b A1 B1 right:C D c C0 D0 d C1 D1

    代碼:

    print("pd.merge(left_index=right_index=True):\n",pd.merge(left, right, how='outer', left_index=True, right_index=True))

    輸出結果:

    A B C D a A0 B0 NaN NaN b A1 B1 NaN NaN c NaN NaN C0 D0 d NaN NaN C1 D1

    根據行索引合并數據——join()方法

    join(self, other, on=None, how=“left”, lsuffix="", rsuffix="", sort=False)

    上述方法常用參數表示的含義如下:

  • on:用于連接列名
  • how:可從{‘left’,‘right’,‘outer’,‘inner’}中任選一個,默認使用left的方式
  • lsuffix:接受字符串,用于在左側重疊的列名后添加后綴名
  • rsuffix:接受字符串,用于在右側重疊的列名后添加后綴名
  • sort:接受布爾值,根據連接鍵對合并的數據進行排序,默認為False
  • 四種連接方式

    測試對象:

    data1:A B C a A0 B0 C0 b A1 B1 C1 c A2 B2 C2 data2:B C D b B1 C1 D1 c B2 C2 D2 d B3 C3 D3

    代碼:

    data1 = pd.DataFrame({'A': ['A0', 'A1', 'A2'],'B': ['B0', 'B1', 'B2'],'C': ['C0', 'C1', 'C2']},index=['a', 'b', 'c']) data2 = pd.DataFrame({'B': ['B1', 'B2', 'B3'],'C': ['C1', 'C2', 'C3'],'D': ['D1', 'D2', 'D3']},index=['b', 'c', 'd']) print("data1.join(data2, how='outer', lsuffix='one'):\n",data1.join(data2, how='outer', lsuffix='one')) print("data1.join(data2, how='inner', rsuffix='two'):\n", data1.join(data2, how='inner', rsuffix='two')) print("data1.join(data2, how='left', lsuffix='one'):\n", data1.join(data2, how='left', lsuffix='one')) print("data1.join(data2, how='right', rsuffix='two'):\n", data1.join(data2, how='right', rsuffix='two'))

    輸出結果:

    data1.join(data2, how='outer', lsuffix='one'):A Bone Cone B C D a A0 B0 C0 NaN NaN NaN b A1 B1 C1 B1 C1 D1 c A2 B2 C2 B2 C2 D2 d NaN NaN NaN B3 C3 D3 data1.join(data2, how='inner', rsuffix='two'):A B C Btwo Ctwo D b A1 B1 C1 B1 C1 D1 c A2 B2 C2 B2 C2 D2 data1.join(data2, how='left', lsuffix='one'):A Bone Cone B C D a A0 B0 C0 NaN NaN NaN b A1 B1 C1 B1 C1 D1 c A2 B2 C2 B2 C2 D2 data1.join(data2, how='right', rsuffix='two'):A B C Btwo Ctwo D b A1 B1 C1 B1 C1 D1 c A2 B2 C2 B2 C2 D2 d NaN NaN NaN B3 C3 D3

    行索引與列索引重疊

    測試對象:

    join1:A B key 0 A0 B0 K0 1 A1 B1 K1 2 A2 B2 K2 join2:C D K0 C0 D0 K1 C1 D1 K2 C2 D2

    代碼:

    join1 = pd.DataFrame({'A': ['A0', 'A1', 'A2'],'B': ['B0', 'B1', 'B2'],'key': ['K0', 'K1', 'K2']}) join2 = pd.DataFrame({'C': ['C0', 'C1', 'C2'],'D': ['D0', 'D1', 'D2']},index=['K0', 'K1', 'K2']) print("join1.join(join2, on='key'):\n", join1.join(join2, on='key'))

    輸出結果:

    join1.join(join2, on='key'):A B key C D 0 A0 B0 K0 C0 D0 1 A1 B1 K1 C1 D1 2 A2 B2 K2 C2 D2

    合并重疊數據——combine_first()方法

    使用combine_first()方法合并兩個DataFrame對象時,必須確保它們的行索引和列索引有重疊的部分。

    combine_first(self, other: “DataFrame”)

    上述方法中只有一個參數other,該參數用于接收填充缺失值的DataFrame對象。

    測試對象:

    test1:A B 0 NaN B0 1 A1 NaN 2 A2 B2 3 A3 NaN test2:A B 1 C0 D0 0 C1 D1 2 C2 D2

    代碼:

    test1 = pd.DataFrame({'A': [np.nan, 'A1', 'A2', 'A3'],'B': ['B0', np.nan, 'B2', np.nan]}) test2 = pd.DataFrame({'A': ['C0', 'C1', 'C2'],'B': ['D0', 'D1', 'D2']},index=[1, 0, 2]) print("test1.combine_first(test2):\n", test1.combine_first(test2))

    輸出結果:

    test1.combine_first(test2):A B 0 C1 B0 1 A1 D0 2 A2 B2 3 A3 NaN

    從上可知,盡管test2表中的行索引與test1表的行索引順序不同,當用test2表的數據替換test1表的NaN值時,替換數據與缺失數據的索引位置仍然是相同的。例如,test1表中位于第0行第A列的“NaN”需要使用test2表中相同位置的數據“C1"來替換。

    總結

    以上是生活随笔為你收集整理的Python之数据合并——【concat()函数、merge()函数、join()方法、combine_first()方法】的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。