pandas數(shù)據(jù)的合并concat()和merge()方式
import pandas as pd
- 軸向連接(concatenation):
pd.concat()可以沿一個(gè)軸將多個(gè)DataFrame對(duì)象連接在一起, 形成一個(gè)新的Dataframe對(duì)象 - 融合(merging):
pd.merge()方法可以根據(jù)一個(gè)或多個(gè)鍵將不同DataFrame中的行連接起來。
concat() 軸向連接
concat() 函數(shù)可以將數(shù)據(jù)根據(jù)不同的軸作進(jìn)行合并
pd.concat(objs, axis=0, join='outer')
objs: series、dataframe或者是panel構(gòu)成的序列l(wèi)istaxis: 需要合并鏈接的軸,0是行,1是列,默認(rèn)是0join:連接的方式 inner,或者outer,默認(rèn)是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時(shí),列進(jìn)行并集處理,縱向表拼接,缺失值由NaN填充,并且會(huì)保留原有數(shù)據(jù)的行索引
pd.concat([df1, df2], axis=0, join='outer', sort=True) # 我沒加 sort=True 會(huì)報(bào)一個(gè)警告

| 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 |
- 如果兩個(gè)表的index都沒有實(shí)際含義, 使用
ignore_index參數(shù)置為 true, 重新生成一個(gè)新的index
pd.concat([df1,df2],axis=0,join='outer',ignore_index=True, sort=True) # 我沒加 sort=True 會(huì)報(bào)一個(gè)警告
| 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時(shí),行進(jìn)行并集處理,橫向表拼接,缺失值由NaN填充

pd.concat([df1,df2],axis=1,join='outer', sort=True) # 我沒加 sort=True 會(huì)報(bào)一個(gè)警告
| 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, 兩個(gè)要合并的DataFrame(對(duì)應(yīng)的左連接和右連接)
how: 連接的方式, 有inner(內(nèi)連接)、left(左連接)、right(右連接)、outer(外連接), 默認(rèn)為 inneron: 指的是用于連接的列索引名稱, 必須存在于左右兩個(gè)DataFrame中, 如果沒有指定且其他參數(shù)也沒有指定,則兩個(gè)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()默認(rèn)做inner連接,并且使用兩個(gè)DataFrame的列名交集(key)作為連接鍵,同樣,最終連接的數(shù)據(jù)也是兩個(gè)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í)最終連接的數(shù)據(jù)是兩個(gè)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í),最終連接的數(shù)據(jù)將以left數(shù)據(jù)的鏈接建為準(zhǔn)合并兩個(gè)數(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í),最終連接的數(shù)據(jù)將以right數(shù)據(jù)的鏈接建為準(zhǔn)合并兩個(gè)數(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)在有兩張表格分別存儲(chǔ)了9月和10月份的成交信息,
- 那么這個(gè)時(shí)候我們就可以使用concat( )將兩個(gè)表沿著0軸合并
例如:
- 現(xiàn)在有兩張表格,一個(gè)是成交信息,包含訂單號(hào)、金額、客戶ID等信息;
- 第二個(gè)是客戶信息,包含客戶ID、姓名、電話號(hào)等信息,那么這個(gè)時(shí)候我們就可以使用merge()根據(jù)客戶ID將兩個(gè)表合并成一個(gè)完整的表
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- pandas常用表連接merge/concat/join/append詳解
- Pandas使用Merge與Join和Concat分別進(jìn)行合并數(shù)據(jù)效率對(duì)比分析
- pandas中DataFrame數(shù)據(jù)合并連接(merge、join、concat)
- pandas dataframe的合并實(shí)現(xiàn)(append, merge, concat)
- 在Pandas中DataFrame數(shù)據(jù)合并,連接(concat,merge,join)的實(shí)例
- Pandas 合并多個(gè)Dataframe(merge,concat)的方法
相關(guān)文章
Pandas sample隨機(jī)抽樣的實(shí)現(xiàn)
隨機(jī)抽樣,是統(tǒng)計(jì)學(xué)中常用的一種方法,本文主要介紹了Pandas sample隨機(jī)抽樣的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-06-06
20個(gè)Python?random模塊常用函數(shù)的應(yīng)用與代碼示例
隨機(jī)數(shù)在計(jì)算機(jī)科學(xué)和數(shù)據(jù)科學(xué)領(lǐng)域中扮演著重要角色,Python的標(biāo)準(zhǔn)庫中提供了random模塊,用于生成各種隨機(jī)數(shù),本文將深入探討random模塊的各種函數(shù),以及它們的應(yīng)用場景和代碼示例,需要的可以參考下2024-03-03
淺談numpy數(shù)組中冒號(hào)和負(fù)號(hào)的含義
下面小編就為大家分享一篇淺談numpy數(shù)組中冒號(hào)和負(fù)號(hào)的含義,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-04-04
Python實(shí)現(xiàn)線程池之線程安全隊(duì)列
這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)線程池之線程安全隊(duì)列,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05
Python圖形化界面基礎(chǔ)篇之如何使用彈出窗口和對(duì)話框
對(duì)于Python程序員來說,處理彈出窗口似乎并不是一個(gè)常見的任務(wù),這篇文章主要給大家介紹了關(guān)于Python圖形化界面基礎(chǔ)篇之如何使用彈出窗口和對(duì)話框的相關(guān)資料,需要的朋友可以參考下2024-03-03
數(shù)據(jù)清洗--DataFrame中的空值處理方法
今天小編就為大家分享一篇數(shù)據(jù)清洗--DataFrame中的空值處理方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-07-07

