1. 使用pd.concat()级联
# 导包
import numpy as np
import 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 df
make_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)
# 使用多层索引 keys
pd.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 |
---|