
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 |
|---|