Pandas DataFrame進行數(shù)據(jù)拼接方法詳解
在Pandas中拼接DataFrame是數(shù)據(jù)整合的核心操作,以下是一些拼接方法及代碼示例

1.concat():沿軸拼接多個DataFrame
適用于結(jié)構(gòu)相似的數(shù)據(jù)集(相同列或相同索引),支持縱向(行)或橫向(列)拼接。
參數(shù)關鍵點
axis=0(默認):縱向拼接(增加行);axis=1:橫向拼接(增加列)。join='outer':保留所有行列(缺值填NaN);join='inner':僅保留共有行列。ignore_index=True:重置索引,避免重復。keys:添加分層索引,標記來源。
代碼示例
import pandas as pd
# 縱向拼接(行追加)
df1 = pd.DataFrame({'A': ['A0', 'A1'], 'B': ['B0', 'B1']})
df2 = pd.DataFrame({'A': ['A2', 'A3'], 'B': ['B2', 'B3']})
result_vertical = pd.concat([df1, df2], ignore_index=True)
結(jié)果如下:
| A | B | |
|---|---|---|
| 0 | A0 | B0 |
| 1 | A1 | B1 |
| 2 | A2 | B2 |
| 3 | A3 | B3 |
# 橫向拼接(列合并)
df3 = pd.DataFrame({'C': ['C0', 'C1'], 'D': ['D0', 'D1']}, index=[0,1])
result_horizontal = pd.concat([df1, df3], axis=1)
結(jié)果如下:
| A | B | C | D | |
|---|---|---|---|---|
| 0 | A0 | B0 | C0 | D0 |
| 1 | A1 | B1 | C1 | D1 |
2.merge():基于鍵值合并(類似SQL JOIN)
適用于關聯(lián)不同結(jié)構(gòu)的數(shù)據(jù)集,通過共享列(鍵)連接。
參數(shù)關鍵點
how:連接方式(inner、left、right、outer)。on:指定連接鍵列名;left_on/right_on:左右表鍵名不同時使用。left_index/right_index=True:用索引作為連接鍵。
代碼示例
# 內(nèi)連接(保留共有鍵)
left = pd.DataFrame({'key': ['K0', 'K1'], 'A': ['A0', 'A1']})
right = pd.DataFrame({'key': ['K0', 'K2'], 'B': ['B0', 'B2']})
result_inner = pd.merge(left, right, on='key', how='inner')
結(jié)果如下:
| key | A | B | |
|---|---|---|---|
| 0 | K0 | A0 | B0 |
# 外連接(保留所有鍵,缺值填NaN) result_outer = pd.merge(left, right, on='key', how='outer') result_outer
結(jié)果如下:
| key | A | B | |
|---|---|---|---|
| 0 | K0 | A0 | B0 |
| 1 | K1 | A1 | NaN |
| 2 | K2 | NaN | B2 |
3.join():基于索引快速連接
merge的簡化版,默認按索引拼接,適合索引對齊的場景。
參數(shù)關鍵點
how:連接方式(默認左連接)。lsuffix/rsuffix:左右表列名沖突時添加后綴。
代碼示例
left_df = pd.DataFrame({'value': [1, 2]}, index=['A', 'B'])
right_df = pd.DataFrame({'value': [7, 8]}, index=['A', 'C'])
joined = left_df.join(right_df, how='inner', lsuffix='_left', rsuffix='_right')
joined
結(jié)果如下:
| value_left | value_right | |
|---|---|---|
| A | 1 | 7 |
4.combine_first():填充缺失值
用第二個DataFrame的非空值補全第一個DataFrame的NaN,適合數(shù)據(jù)補全。
代碼示例
df1 = pd.DataFrame({'A': [1, None, 3], 'B': [4, 5, None]}, index=['X', 'Y', 'Z'])
df2 = pd.DataFrame({'A': [None, 10, 11], 'B': [7, 8, 9]}, index=['Y', 'Z', 'W'])
filled = df1.combine_first(df2)
filled
結(jié)果如下:
| A | B | |
|---|---|---|
| W | 11.0 | 9.0 |
| X | 1.0 | 4.0 |
| Y | NaN | 5.0 |
| Z | 3.0 | 8.0 |
性能與場景對比
| 方法 | 適用場景 | 性能優(yōu)勢 |
|---|---|---|
concat() | 同構(gòu)數(shù)據(jù)批量拼接(行/列擴展) | ????(高效批處理) |
merge() | 異構(gòu)數(shù)據(jù)關聯(lián)(類似SQL JOIN) | ???(靈活但稍慢) |
join() | 索引對齊的快速合并 | ????(索引優(yōu)化) |
combine_first() | 缺失值填充(非拼接主導) | ?? |
高效建議:
- 批量縱向拼接優(yōu)先用
concat(ignore_index=True); - 關聯(lián)查詢用
merge并明確指定on鍵; - 避免已棄用的
append(),用concat替代。
通過以上方法,可靈活應對DataFrame拼接需求,平衡效率與功能。
到此這篇關于Pandas DataFrame進行數(shù)據(jù)拼接方法詳解的文章就介紹到這了,更多相關Pandas DataFrame數(shù)據(jù)拼接內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python pandas進行數(shù)據(jù)預處理的實現(xiàn)
本案例通過使用pandas庫對電子商務客戶數(shù)據(jù)進行數(shù)據(jù)預處理,包括數(shù)據(jù)導入、查看、缺失值處理等處理,具有一定的參考價值,感興趣的可以了解一下2025-01-01
Python退出While循環(huán)的3種方法舉例詳解
在每次循環(huán)結(jié)束后,我們需要檢查循環(huán)條件是否滿足。如果條件滿足,則繼續(xù)執(zhí)行循環(huán)體內(nèi)的代碼,否則退出循環(huán),這篇文章主要給大家介紹了關于Python退出While循環(huán)的3種方法,需要的朋友可以參考下2023-10-10
python內(nèi)置函數(shù)compile(),complex()的使用
這篇文章主要為大家詳細介紹了python內(nèi)置函數(shù)compile(),complex()的使用,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-06-06
python中數(shù)組array和列表list的基本用法及區(qū)別解析
大家都知道數(shù)組array是同類型數(shù)據(jù)的有限集合,列表list是一系列按特定順序排列的元素組成,可以將任何數(shù)據(jù)放入列表,且其中元素之間沒有任何關系,本文介紹python中數(shù)組array和列表list的基本用法及區(qū)別,感興趣的朋友一起看看吧2022-05-05
Python代碼實現(xiàn)為PDF添加頁碼(附詳細教程)
在處理合同、報告、論文、技術文檔等 PDF 時,給頁面添加頁碼幾乎是必備功能,本文將介紹如何使用 Spire.PDF for Python 這個強大的庫,通過簡單的代碼為 PDF 文件自動添加 中文頁碼 ,希望對大家有所幫助2026-05-05
python實現(xiàn)隨機森林random forest的原理及方法
本篇文章主要介紹了python實現(xiàn)隨機森林random forest的原理及方法,詳細的介紹了隨機森林的原理和python實現(xiàn),非常具有參考價值,有興趣的可以了解一下2017-12-12

