pandas數(shù)據(jù)的合并concat()和merge()方式
更新時間:2025年08月02日 14:57:16 作者:藍小白1024
Pandas中concat沿軸合并數(shù)據(jù)框(行或列),merge基于鍵連接(內(nèi)/外/左/右),concat用于縱向或橫向拼接,merge用于關(guān)聯(lián)數(shù)據(jù),如合并訂單與客戶信息
import pandas as pd
- 軸向連接(concatenation):
pd.concat()可以沿一個軸將多個DataFrame對象連接在一起, 形成一個新的Dataframe對象 - 融合(merging):
pd.merge()方法可以根據(jù)一個或多個鍵將不同DataFrame中的行連接起來。
concat() 軸向連接
concat() 函數(shù)可以將數(shù)據(jù)根據(jù)不同的軸作進行合并
pd.concat(objs, axis=0, join='outer')
objs: series、dataframe或者是panel構(gòu)成的序列l(wèi)istaxis: 需要合并鏈接的軸,0是行,1是列,默認是0join:連接的方式 inner,或者outer,默認是outer
準(zhǔn)備數(shù)據(jù)
dict1={
'A': ['A0', 'A1', 'A2', 'A3'],
'B': ['B0', 'B1', 'B2', 'B3'],
'C': ['C0', 'C1', 'C2', 'C3']}
df1=pd.DataFrame(dict1)
print(df1)
dict2={
'B': ['B0', 'B1', 'B2', 'B3'],
'C': ['C0', 'C1', 'C2', 'C3'],
'D': ['D0', 'D1', 'D2', 'D3']}
df2=pd.DataFrame(dict2)
print(df2)
合并
join的值 inner ,得到的是兩表的交集,如果是outer,得到的是兩表的并集
(1) join='outer',axis=0
- 當(dāng)join=‘outer’,axis參數(shù)為0時,列進行并集處理,縱向表拼接,缺失值由NaN填充,并且會保留原有數(shù)據(jù)的行索引
pd.concat([df1, df2], axis=0, join='outer', sort=True) # 我沒加 sort=True 會報一個警告

| A | B | C | D | |
|---|---|---|---|---|
| 0 | A0 | B0 | C0 | NaN |
| 1 | A1 | B1 | C1 | NaN |
| 2 | A2 | B2 | C2 | NaN |
| 3 | A3 | B3 | C3 | NaN |
| 0 | NaN | B0 | C0 | D0 |
| 1 | NaN | B1 | C1 | D1 |
| 2 | NaN | B2 | C2 | D2 |
| 3 | NaN | B3 | C3 | D3 |
- 如果兩個表的index都沒有實際含義, 使用
ignore_index參數(shù)置為 true, 重新生成一個新的index
pd.concat([df1,df2],axis=0,join='outer',ignore_index=True, sort=True) # 我沒加 sort=True 會報一個警告
| A | B | C | D | |
|---|---|---|---|---|
| 0 | A0 | B0 | C0 | NaN |
| 1 | A1 | B1 | C1 | NaN |
| 2 | A2 | B2 | C2 | NaN |
| 3 | A3 | B3 | C3 | NaN |
| 4 | NaN | B0 | C0 | D0 |
| 5 | NaN | B1 | C1 | D1 |
| 6 | NaN | B2 | C2 | D2 |
| 7 | NaN | B3 | C3 | D3 |
(2)join='outer',axis=1
- 當(dāng)join=‘outer’,axis參數(shù)為1時,行進行并集處理,橫向表拼接,缺失值由NaN填充

pd.concat([df1,df2],axis=1,join='outer', sort=True) # 我沒加 sort=True 會報一個警告
| A | B | C | B | C | D | |
|---|---|---|---|---|---|---|
| 0 | A0 | B0 | C0 | B0 | C0 | D0 |
| 1 | A1 | B1 | C1 | B1 | C1 | D1 |
| 2 | A2 | B2 | C2 | B2 | C2 | D2 |
| 3 | A3 | B3 | C3 | B3 | C3 | D3 |
(3) join=inner, axis=0
pd.concat([df1,df2],axis=0,join='inner',ignore_index=True)

| B | C | |
|---|---|---|
| 0 | B0 | C0 |
| 1 | B1 | C1 |
| 2 | B2 | C2 |
| 3 | B3 | C3 |
| 4 | B0 | C0 |
| 5 | B1 | C1 |
| 6 | B2 | C2 |
| 7 | B3 | C3 |
merge() 融合
merge(left, right, how='inner', on=None)
參數(shù)介紹
- left和right, 兩個要合并的DataFrame(對應(yīng)的左連接和右連接)
how: 連接的方式, 有inner(內(nèi)連接)、left(左連接)、right(右連接)、outer(外連接), 默認為 inneron: 指的是用于連接的列索引名稱, 必須存在于左右兩個DataFrame中, 如果沒有指定且其他參數(shù)也沒有指定,則兩個DataFrame列名交集作為連接鍵
import pandas as pd
left = pd.DataFrame({'key':['a','b','b','d'],'data1':range(4)})
print(left)
right = pd.DataFrame({'key':['a','b','c'],'data2':range(3)})
print(right)
key data1 0 a 0 1 b 1 2 b 2 3 d 3 key data2 0 a 0 1 b 1 2 c 2
inner(內(nèi)連接)
- merge()默認做inner連接,并且使用兩個DataFrame的列名交集(key)作為連接鍵,同樣,最終連接的數(shù)據(jù)也是兩個DataFramekey列數(shù)據(jù)的交集

pd.merge(left,right)
| key | data1 | data2 | |
|---|---|---|---|
| 0 | a | 0 | 0 |
| 1 | b | 1 | 1 |
| 2 | b | 2 | 1 |
outer (外連接)
- 當(dāng)merge()做outer連接時最終連接的數(shù)據(jù)是兩個DataFramekey列數(shù)據(jù)的并集,缺失的內(nèi)容由NaN填充
pd.merge(left,right,on=['key'],how='outer')

| key | data1 | data2 | |
|---|---|---|---|
| 0 | a | 0.0 | 0.0 |
| 1 | b | 1.0 | 1.0 |
| 2 | b | 2.0 | 1.0 |
| 3 | d | 3.0 | NaN |
| 4 | c | NaN | 2.0 |
left(左連接)
- 當(dāng)merge()做left連接時,最終連接的數(shù)據(jù)將以left數(shù)據(jù)的鏈接建為準(zhǔn)合并兩個數(shù)據(jù)的列數(shù)據(jù),缺失的內(nèi)容由NaN填充

pd.merge(left,right,on=['key'],how='left')
| key | data1 | data2 | |
|---|---|---|---|
| 0 | a | 0 | 0.0 |
| 1 | b | 1 | 1.0 |
| 2 | b | 2 | 1.0 |
| 3 | d | 3 | NaN |
right (右連接)
- 當(dāng)merge()做right連接時,最終連接的數(shù)據(jù)將以right數(shù)據(jù)的鏈接建為準(zhǔn)合并兩個數(shù)據(jù)的列數(shù)據(jù),缺失的內(nèi)容由NaN填充
pd.merge(left,right,on=['key'],how='right')
| key | data1 | data2 | |
|---|---|---|---|
| 0 | a | 0.0 | 0 |
| 1 | b | 1.0 | 1 |
| 2 | b | 2.0 | 1 |
| 3 | c | NaN | 2 |
應(yīng)用場景
例如:
- 現(xiàn)在有兩張表格分別存儲了9月和10月份的成交信息,
- 那么這個時候我們就可以使用concat( )將兩個表沿著0軸合并
例如:
- 現(xiàn)在有兩張表格,一個是成交信息,包含訂單號、金額、客戶ID等信息;
- 第二個是客戶信息,包含客戶ID、姓名、電話號等信息,那么這個時候我們就可以使用merge()根據(jù)客戶ID將兩個表合并成一個完整的表
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
python3中sorted函數(shù)里cmp參數(shù)改變詳解
在本篇文章里小編給大家整理的是關(guān)于python3中sorted函數(shù)里關(guān)于cmp這一參數(shù)的改變相關(guān)內(nèi)容,需要的朋友們可以學(xué)習(xí)下。2020-03-03
使用Python批量將Word轉(zhuǎn)PDF的實現(xiàn)技巧
我們在實際工作中很容易發(fā)現(xiàn),有些時候我們需要將Word文檔轉(zhuǎn)換為PDF文檔,如果只是一個文件,我們也只是需要通過Word提供的轉(zhuǎn)換為PDF文檔的功能就可以實現(xiàn)了,那么多個文檔如何實現(xiàn)呢,所以本文給大家介紹了Python批量將Word轉(zhuǎn)PDF的實現(xiàn)技巧,需要的朋友可以參考下2025-08-08
python anaconda 安裝 環(huán)境變量 升級 以及特殊庫安裝的方法
下面小編就為大家?guī)硪黄猵ython anaconda 安裝 環(huán)境變量 升級 以及特殊庫安裝的方法。2017-06-06

