'''
多表的横向拼接:在横向将两个表依据公共列拼接在一起
'''
# 连接表的类型
# 1。一对一:就是两个表的公共列是一对一的
import pandas as pd
df1 = pd.read_excel('/Users/caizhengjie/Desktop/数据分析数据/多表拼接/数据1.xlsx')
df2 = pd.read_excel('/Users/caizhengjie/Desktop/数据分析数据/多表拼接/数据2.xlsx')
print(df1)
print(df2)
#如果将df1和df2表拼接在一起,直接用pd.merge()方法
print(pd.merge(df1,df2))
# 2。多对一:就是待连接的两个表的公共列不是一对一的,其中一个表的公共列有重复值,另一个表的公共列有唯一值
df3 = pd.read_excel('/Users/caizhengjie/Desktop/数据分析数据/多表拼接/数据3.xlsx')
df4 = pd.read_excel("/Users/caizhengjie/Desktop/数据分析数据/多表拼接/数据4.xlsx" )
print(df3)
print(df4)
print(pd.merge(df3, df4,on='学号'))
# 3。多对多:就是待连接的两个表的公共列不是一对一的,且两个表中的公共列都有重复值
df5 = pd.read_excel('/Users/caizhengjie/Desktop/数据分析数据/多表拼接/数据5.xlsx')
df6 = pd.read_excel('/Users/caizhengjie/Desktop/数据分析数据/多表拼接/数据6.xlsx')
print(df5)
print(df6)
print(pd.merge(df5,df6))
# 连接键的类型
# 1默认以公共列作为连接键:pd.merge()方法会默认寻找两个表中的公共列,然后以这个公共列作为连接键进行连接
print(pd.merge(df1,df2))
# 2用on来指定连接键:也可以用on来指定连接键,参数on一般指定的也是两个表中的公共键,公共列也可以有多个
print(pd.merge(df3, df4,on='学号'))
# 3分别指定左右连接键:当两个表中没有公共列时,这里指的是实际值一样,但列名不同,这个时候就要分别指明是左表和右表连接,使用的参数分别是left_on和right_on
df7 = pd.read_excel('/Users/caizhengjie/Desktop/数据分析数据/多表拼接/数据7.xlsx')
print(pd.merge(df7, df2,left_on='编号',right_on='学号'))
# 4把索引列当作连接键
DF1 = df7.set_index('编号')
DF2 = df2.set_index('学号')
print(pd.merge(DF1,DF2,left_index=True, right_index=True))
# 还可以把索引列和普通列混用
print(pd.merge(DF1,df2,left_index=True, right_on='学号'))
# 连接方式
# 1内连接:就是取两个表中的公共部分,如果不指定连接方式,则默认是内连接
df8 = pd.read_excel('/Users/caizhengjie/Desktop/数据分析数据/多表拼接/数据8.xlsx')
print(pd.merge(df1,df8,on='学号',how='inner'))
# 2左连接:就是以左表为基础,右表往左表上拼接。
print(pd.merge(df1,df8,on='学号',how='left'))
# 3右连接:就是以右表为基础,左表往右表上拼接
print(pd.merge(df1,df8,on='学号',how='right'))
# 4外连接:就是取两个表的交集
print(pd.merge(df1,df8,on='学号',how='outer'))
# 重复列名处理
# 两个表在进行连接时,经常会遇到列名重复的情况,当然我们可以自定义重复的列名,只需要修改参数suffixes的值即可,默认是['_x','_y']
print(df1)
print(df8)
print(pd.merge(df1,df8,on='学号',how='inner'))
# 给重复的列名加后缀_L_R
print(pd.merge(df1,df8,on='学号',how='inner',suffixes=['_L','_R']))