
 
1. 使用pd.concat()级联
 
 
# 导包import numpy as npimport pandas as pd# 为方便讲解,我们首先定义一个生成DataFrame的函数def make_df(indexs,columns):    data = [[str(j)+str(i) for j in columns] for i in indexs]    df = pd.DataFrame(data=data,index=indexs,columns=columns)    return dfmake_df([1,2,3,4],list("ABCD"))
 
 
|  | A | B | C | D | 
|---|
| 1 | A1 | B1 | C1 | D1 | 
|---|
| 2 | A2 | B2 | C2 | D2 | 
|---|
| 3 | A3 | B3 | C3 | D3 | 
|---|
| 4 | A4 | B4 | C4 | D4 | 
|---|
 
 
 
df1 = make_df([1,2],["A","B"])df2 = make_df([3,4],["A","B"])display(df1,df2)
 
 
 
 
 
 
# 默认上下合并(垂直合并)pd.concat([df1,df2])
 
 
 
 
# 左右合并(水平合并)pd.concat([df1,df2],axis=1)
 
 
|  | A | B | A | B | 
|---|
| 1 | A1 | B1 | NaN | NaN | 
|---|
| 2 | A2 | B2 | NaN | NaN | 
|---|
| 3 | NaN | NaN | A3 | B3 | 
|---|
| 4 | NaN | NaN | A4 | B4 | 
|---|
 
 
# 忽略行索引:重置索引pd.concat([df1,df2],ignore_index=True)
 
 
 
 
# 使用多层索引 keyspd.concat([df1,df2],keys=["x","y"])
 
 
 
 
pd.concat([df1,df2],keys=["x","y"], axis=1)
 
 
|  | x | y | 
|---|
|  | A | B | A | B | 
|---|
| 1 | A1 | B1 | NaN | NaN | 
|---|
| 2 | A2 | B2 | NaN | NaN | 
|---|
| 3 | NaN | NaN | A3 | B3 | 
|---|
| 4 | NaN | NaN | A4 | B4 | 
|---|
 
 
 
不匹配指的是级联的维度的索引不一致,例如纵向级联时列索引不一致,横向级联时行索引不一致。
 
 
df3 = make_df([1,2,3,4],list("ABCD"))df4 = make_df([2,3,4,5],list("BCDE"))display(df3,df4)
 
 
|  | A | B | C | D | 
|---|
| 1 | A1 | B1 | C1 | D1 | 
|---|
| 2 | A2 | B2 | C2 | D2 | 
|---|
| 3 | A3 | B3 | C3 | D3 | 
|---|
| 4 | A4 | B4 | C4 | D4 | 
|---|
 
 
|  | B | C | D | E | 
|---|
| 2 | B2 | C2 | D2 | E2 | 
|---|
| 3 | B3 | C3 | D3 | E3 | 
|---|
| 4 | B4 | C4 | D4 | E4 | 
|---|
| 5 | B5 | C5 | D5 | E5 | 
|---|
 
 
# 对应索引没有值,会自动用NaN填充pd.concat([df3,df4])
 
 
|  | A | B | C | D | E | 
|---|
| 1 | A1 | B1 | C1 | D1 | NaN | 
|---|
| 2 | A2 | B2 | C2 | D2 | NaN | 
|---|
| 3 | A3 | B3 | C3 | D3 | NaN | 
|---|
| 4 | A4 | B4 | C4 | D4 | NaN | 
|---|
| 2 | NaN | B2 | C2 | D2 | E2 | 
|---|
| 3 | NaN | B3 | C3 | D3 | E3 | 
|---|
| 4 | NaN | B4 | C4 | D4 | E4 | 
|---|
| 5 | NaN | B5 | C5 | D5 | E5 | 
|---|
 
 
# 外连接:类似并集,显示所有数据pd.concat([df3,df4],join="outer")
 
 
|  | A | B | C | D | E | 
|---|
| 1 | A1 | B1 | C1 | D1 | NaN | 
|---|
| 2 | A2 | B2 | C2 | D2 | NaN | 
|---|
| 3 | A3 | B3 | C3 | D3 | NaN | 
|---|
| 4 | A4 | B4 | C4 | D4 | NaN | 
|---|
| 2 | NaN | B2 | C2 | D2 | E2 | 
|---|
| 3 | NaN | B3 | C3 | D3 | E3 | 
|---|
| 4 | NaN | B4 | C4 | D4 | E4 | 
|---|
| 5 | NaN | B5 | C5 | D5 | E5 | 
|---|
 
 
# 内连接:类似交集,只显示共同的部分pd.concat([df3,df4],join="inner")
 
 
|  | B | C | D | 
|---|
| 1 | B1 | C1 | D1 | 
|---|
| 2 | B2 | C2 | D2 | 
|---|
| 3 | B3 | C3 | D3 | 
|---|
| 4 | B4 | C4 | D4 | 
|---|
| 2 | B2 | C2 | D2 | 
|---|
| 3 | B3 | C3 | D3 | 
|---|
| 4 | B4 | C4 | D4 | 
|---|
| 5 | B5 | C5 | D5 | 
|---|