python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > pandas数据的合并concat()和merge()

pandas数据的合并concat()和merge()方式

作者:蓝小白1024

Pandas中concat沿轴合并数据框(行或列),merge基于键连接(内/外/左/右),concat用于纵向或横向拼接,merge用于关联数据,如合并订单与客户信息
import pandas as pd

concat() 轴向连接

concat() 函数可以将数据根据不同的轴作进行合并

pd.concat(objs, axis=0, join='outer')

准备数据

dict1={
    'A': ['A0', 'A1', 'A2', 'A3'],
    'B': ['B0', 'B1', 'B2', 'B3'],
    'C': ['C0', 'C1', 'C2', 'C3']}
df1=pd.DataFrame(dict1)
print(df1)

dict2={
    'B': ['B0', 'B1', 'B2', 'B3'],
    'C': ['C0', 'C1', 'C2', 'C3'],
    'D': ['D0', 'D1', 'D2', 'D3']}
df2=pd.DataFrame(dict2)
print(df2)

合并

join的值 inner ,得到的是两表的交集,如果是outer,得到的是两表的并集

(1) join='outer',axis=0

pd.concat([df1, df2], axis=0, join='outer', sort=True) # 我没加 sort=True 会报一个警告

ABCD
0A0B0C0NaN
1A1B1C1NaN
2A2B2C2NaN
3A3B3C3NaN
0NaNB0C0D0
1NaNB1C1D1
2NaNB2C2D2
3NaNB3C3D3
pd.concat([df1,df2],axis=0,join='outer',ignore_index=True, sort=True) # 我没加 sort=True 会报一个警告
ABCD
0A0B0C0NaN
1A1B1C1NaN
2A2B2C2NaN
3A3B3C3NaN
4NaNB0C0D0
5NaNB1C1D1
6NaNB2C2D2
7NaNB3C3D3

(2)join='outer',axis=1

pd.concat([df1,df2],axis=1,join='outer', sort=True) # 我没加 sort=True 会报一个警告
ABCBCD
0A0B0C0B0C0D0
1A1B1C1B1C1D1
2A2B2C2B2C2D2
3A3B3C3B3C3D3

(3) join=inner, axis=0

pd.concat([df1,df2],axis=0,join='inner',ignore_index=True)

BC
0B0C0
1B1C1
2B2C2
3B3C3
4B0C0
5B1C1
6B2C2
7B3C3

merge() 融合

merge(left, right, how='inner', on=None)

参数介绍

import pandas as pd
left = pd.DataFrame({'key':['a','b','b','d'],'data1':range(4)})
print(left)

right = pd.DataFrame({'key':['a','b','c'],'data2':range(3)})
print(right)
  key  data1
0   a      0
1   b      1
2   b      2
3   d      3
  key  data2
0   a      0
1   b      1
2   c      2

inner(内连接)

pd.merge(left,right)
keydata1data2
0a00
1b11
2b21

outer (外连接)

pd.merge(left,right,on=['key'],how='outer')

keydata1data2
0a0.00.0
1b1.01.0
2b2.01.0
3d3.0NaN
4cNaN2.0

left(左连接)

pd.merge(left,right,on=['key'],how='left')
keydata1data2
0a00.0
1b11.0
2b21.0
3d3NaN

right (右连接)

pd.merge(left,right,on=['key'],how='right')
keydata1data2
0a0.00
1b1.01
2b2.01
3cNaN2

应用场景

例如:

例如:

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文