用python进行表格的连接

1.merge()函数

#若未指定在哪一列上进行连接,则自动将重叠列名作为连接的键,指定键,用on=''
# print(pd.merge(df1,df2,on='key'))#innerjoin,交集
# print(pd.merge(df1,df2,how='outer'))#联合了左连接和右连接的效果,是并集
# print(pd.merge(df1,df2,how='left'))#相当于left join,若左边值唯一,右边值是两个,则会显示两个重复的值


#若列名不同,则可分别指定列名
# df3=pd.DataFrame({'lkey':['b','b','a','c','a','a','b'],'data1':range(7)})
# df4=pd.DataFrame({'rkey':['a','b','d'],'data2':range(3)})
# print(pd.merge(df3,df4,left_on='lkey',right_on='rkey'))

df1=pd.DataFrame({'key1':['b','b','a','c','a','b'],'data1':range(6)})
df2=pd.DataFrame({'key2':['a','b','a','b','d'],'data2':range(5)})
#merge()函数进行多对多连接,结果为行的笛卡尔积,列如左边的df1有三个b,右边的df2有两个b,则昨连接后有6个b。
print(pd.merge(df1,df2,left_on='key1',right_on='key2',how='left'))

#使用多个键进行合并时,传入一个列名的列表 on=['key1','key2']
left=pd.DataFrame({'key1':['foo','foo','bar'],'key2':['one','one','two'],'lval':[1,2,3]})
right=pd.DataFrame({'key1':['foo','foo','bar','bar'],'key2':['one','one','one','two'],'rval':[4,5,6,7]})
print(pd.merge(left,right,on=['key1','key2'],how='outer'))

#连接合并后处理重叠列名,使用merge函数的suffixes参数
print(pd.merge(left,right,on='key1',suffixes=('_a','_b')))
View Code

 

 

 

 

2.concat函数()

#pd.concat()函数,实现列表的堆叠,默认沿着列进行拼接,若传入axis=1,则沿着行进行拼接
# s1=pd.Series([0,1],index=['a','b'])
# s2=pd.Series([2,3,4],index=['c','d','e'])
# s3=pd.Series([5,6],index=['f','g'])
# print(pd.concat([s1,s2,s3],axis=1))#相当于s1,s2,s3的outer join

# s4=pd.concat([s1,s3])
# #横向拼接
# print(pd.concat([s1,s4],axis=1))
# #取横向拼接后的交集
# print(pd.concat([s1,s4],axis=1,join='inner'))
# #为了区分连接后的对象,可以使用keys参数来进行
# result=pd.concat([s1,s2,s3],keys=['one','two','three'])
# print(result.unstack().stack())

#将concat()函数应用到dataframe上
# df1=pd.DataFrame(np.arange(6).reshape(3,2),index=['a','b','c'],columns=['one','two'])
# df2=pd.DataFrame(5+np.arange(4).reshape(2,2),index=['a','c'],columns=['three','four'])
# print(pd.concat([df1,df2],axis=1,keys=['level1','level2']))
# print(df1)
# print(df2)

#粗暴拼接,不按照索引进行拼接,按照先后谁许进行拼接
df1=pd.DataFrame(np.random.randn(3,4),columns=['a','b','c','d'])
df2=pd.DataFrame(np.random.rand(2,3),columns=['b','d','a'])
print(df1)
print(df2)
print(pd.concat([df1,df2],ignore_index=True))
print(pd.concat([df1,df2],axis=1))
View Code

 

 

 

 

posted @ 2020-11-16 20:30  爬爬QQ  阅读(642)  评论(0)    收藏  举报