可參考pd.merge
python中多表拼接簡要概括(參考張俊紅的書《對比excel學python數(shù)據(jù)分析》),以便自我查閱:
merge() 主要用于多表橫向拼接
concat() 主要用于縱向拼接
1,merge()橫向拼接
(一)當能夠找到公共列(兩表中該列內(nèi)容完全一樣):
(1)默認會自動尋找兩個表的公共列
(2)用on指定連接鍵,一般指定的也是兩個表的公共列,on可以指定一個或多個連接鍵
如pd.merge(df1,df2,on=‘學號’)
或者pd.merge(df1,df2,on=[‘姓名’,‘學號’])
(3)分別指定左右連接鍵:當兩表沒有公共列(此處指實際值一樣,但列名不同,如‘編號’和‘學號’,實際值都是學號),用left_on和right_on分別指定左表和右表用作連接鍵的列名,本質(zhì)上還是自動尋找兩個表的公共列
(4)把索引列當作連接鍵(兩表的公共列是索引列):left_index=True, right_index=True
或者left_index=True, right_on=‘學號’,表示左表連接鍵作為索引、右邊連接鍵作為普通列
(二)當兩表找不到完全一致的公共列(如df1中‘姓名’列包含‘小張’、‘小王’,df2中‘姓名’列包含‘小張’、‘小李’),采用how參數(shù)指明連接方式
(1)內(nèi)連接(how=‘inner’),兩表做交集,采用公共部分
(2)左連接(how=‘left’),以左表為基礎(chǔ),右表往左表上拼接(左表全保留,右表根據(jù)左表增刪,左表中有、右表沒有的部分,拼接過來用NaN填充)
(3)右連接(how=‘right’),以右表為基礎(chǔ),其他同上
(4)外連接(how=‘outer’),兩表做并集,缺失的部分用NaN填補
注:非連接列出現(xiàn)重復列名時,merge()會自動添加后綴_x,_y,_z等,可通過suffixes=[’_L’,’_R’]等方式修改
2,concat()縱向拼接,一般是若干個數(shù)據(jù)結(jié)構(gòu)相同的表格進行垂直方向拼接
pd.concat([df1,df2])
(1)默認保留原表索引,如df1和df2索引都為1234,則concat后索引為12341234
ignore_index=True,不保留原索引,重新生成一組索引01234567
(2) 重復值處理,若df1中‘姓名’列有‘小張’、‘小李’,df2的‘姓名’列有‘小王’、‘小李’,pd.concat(df1,df2)之后‘小李’出現(xiàn)兩次,采用drop_duplicates()刪除重復值
如pd.concat([df1,df1],ignore_index=True).drop_duplicates()
3,關(guān)于join()功能類似于merge(),用于橫向拼接
區(qū)別在于join只有一種連接鍵(索引作為連接鍵),而merge()有多種連接方式
df1.join(df2) ,df1和df2索引一致
若df1和df2索引不一致但有公共列(列名為‘ID’),則可先將公共列設(shè)為索引,再join,如:
df=df1.set_index(‘ID’).join(df2.set_index(‘ID’))
參考https://stackoverflow.com/questions/22676081/what-is-the-difference-between-join-and-merge-in-pandas
‘the related DataFrame.join method, uses merge internally for the
index-on-index and index-on-column(s) joins, but joins on indexes by
default rather than trying to join on common columns (the default
behavior for merge). If you are joining on index, you may wish to
use DataFrame.join to save yourself some typing.’
聯(lián)系客服