dataframe 上下拼接_Part28:DataFrame的级联和合并操作

本文详细介绍了Pandas中DataFrame的级联和合并操作,包括使用pd.concat进行上下左右拼接,以及如何通过join参数实现内外连接。此外,还探讨了pd.merge函数,它依赖于共同列进行合并,并展示了不同类型的合并方式,如一对一、一对多、内合并、外合并、左合并和右合并。最后讨论了列冲突时的规范化处理和手动指定连接列的方法。
摘要由CSDN通过智能技术生成

一、级联操作pd.concat,pd.append

pandas使用pd.concat函数,与np.concatenate函数类似,只是多了一些参数:objs

axis=0

keys

join='outer'/'inner':表示级联的方式,outer会将所有项进行级联(忽略匹配和不匹配),而inner会将匹配的项级联到一起,不匹配的不级联。

ignore_index=False

准备两张表df1和df2,进行匹配级联和不匹配级联

import numpy as np

import pandas as pd

from pandas import DataFrame

df1=DataFrame(data=np.random.randint(1,100,size=(4,3)),columns=['A','B','C'])

df2=DataFrame(data=np.random.randint(1,100,size=(4,3)),columns=['A','D','C'])

df1

df2

1、 匹配级联指的是进行级联的表在同一维度的索引相同,比如列或者行索引都是['A','B','C']

#df1和df1两张表级联

pd.concat((df1,df1),axis=1)

2、 不匹配级联不匹配指的是级联的维度索引不同,比如,纵向索引['A','B','C']和['A','D','C']不一样或者横向索引不一样[0,1,2,3]和[2,3,6,8]

有两种连接方式:外连接:默认会补空NaN

内连接:值连接匹配的项

#df1和df2两张表级联

pd.concat((df1,df2),axis=1)

#df1和df2两张表级联

pd.concat((df1,df2),axis=0)

#df1和df2两张表级联,内联结

pd.concat((df1,df2),axis=0,join='inner')

#df1和df2两张表级联,外连接

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

#append只能列之间级联

df1.append(df2)

二、合并操作merge与concat的区别在于,merge需要依据某一共同列来进行合并

使用pd.merge()合并时,会自动根据两者名称相同的column列,作为key来合并

注意每一列元素的顺序不要求一致

df1=DataFrame({

'employee':['Jack','John','Lisa'],

'group':['Accounting','Engineering','Engineering']

})

df1

df2=DataFrame({

'employee':['Lisa','John','Jack'],

'hire_date':['2003','2004','2010']

})

df2

df3=DataFrame({

'employee':['Jack','Lisa'],

'group':['Accounting','Engineering'],

'hire_date':['2003','2010']

})

df3

df4=DataFrame({

'group':['Accounting','Engineering','Engineering'],

'supervisor':['Charly','Anna','Christina']

})

df4

df5=DataFrame({

'group':['HR','Engineering','Engineering'],

'supervisor':['Charly','Anna','Christina']

})

df5

#pd.merge()一对一合并

pd.merge(df1,df2,on='employee')

#一对多合并

pd.merge(df3,df4)#如果不指定合并条件,那么默认使用共同列作为合并依据

#df1和df5内合并,只合并能够合并的数据

pd.merge(df1,df5,how='inner')

#df1和df5外合并

pd.merge(df1,df5,how='outer')

#df1和df5左合并,合并之后保留左表中的数据

pd.merge(df1,df5,how='left')

#df1和df5右合并,合并之后保留右表中的数据

pd.merge(df1,df5,how='right')

Key的规范化当列冲突时,即有多个列名称相同时,需要使用on=来指定哪个列作为key,配合suffixes指定冲突列名,如果不指定,默认按照多个相同列名连接

df1 = DataFrame({

'employee':['Jack','Summer','Steve'],

'group':['Accounting','Finance','Marketing']

})

df1

df2 = DataFrame({

'employee':['Jack','Bob','Jack'],

'hire_date':[2013,2015,2018],

'group':['Accounting','sell','ceo']

})

df2

pd.merge(df1,df2,on='group',how='outer')

如果两张表没有可以直接进行连接的列,可以用left_on和right_on手动指定某一列作为连接列

df3 = DataFrame({

'employee':['Jack','Bob','Jack'],

'hire_date':[2013,2015,2018]

})

df3

df4 = DataFrame({

'name':['Jason','Bin','Jack'],

'group':['Accounting','sell','ceo']

})

df4

pd.merge(df3,df4,left_on='employee',right_on='name')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值