一、级联操作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')