这是我参与8月更文挑战的第12天,活动详情查看:8月更文挑战
表的横向拼接就是在横向将两个表依据公共列拼接在一起,本文主要依靠merge方法来进行相关操作
连接表的类型关注的就是待连接的两个表都是什么类型,主要三种情形:一对一、多对一、多对多
为了便于讨论,这里默认合并的两个表有公共列
1 一对一拼接
一对一拼接就是说待拼接的两个表的公共列是一对一的
成绩表:
学生信息表:
import pandas as pd
score_df = pd.read_excel(r'C:\Users\viruser.v-desktop\Desktop\成绩表.xlsx')
print(score_df)
复制代码
result:
学号 姓名 成绩 排名
0 0 小明 90 3
1 1 小刚 89 4
2 2 小红 98 1
3 3 小兰 63 7
4 4 李华 95 2
5 5 张三 23 9
6 6 李四 56 8
7 7 王五 85 5
8 8 小张 72 6
复制代码
info_df = pd.read_excel(r'C:\Users\viruser.v-desktop\Desktop\学生信息表.xlsx')
print(info_df)
复制代码
result:
学号 年级 班级
0 0 三年级 二班
1 1 五年级 三班
2 2 六年级 一班
3 3 一年级 五班
4 4 三年级 二班
5 5 四年级 三班
6 6 三年级 二班
7 7 二年级 一班
8 8 五年级 二班
复制代码
new_df = pd.merge(score_df, info_df)
print(new_df)
复制代码
result:
学号 姓名 成绩 排名 年级 班级
0 0 小明 90 3 三年级 二班
1 1 小刚 89 4 五年级 三班
2 2 小红 98 1 六年级 一班
3 3 小兰 63 7 一年级 五班
4 4 李华 95 2 三年级 二班
5 5 张三 23 9 四年级 三班
6 6 李四 56 8 三年级 二班
7 7 王五 85 5 二年级 一班
8 8 小张 75 6 五年级 二班
复制代码
此时该方法会自动寻找两个表中的公共列,并将找到的公共列作为连接列。在这个例子中学号这一列是作为成绩表和学生信息表这2个表的连接列进行连接的。
2 多对一拼接
多对一连接就是待连接的两个表的公共列不是一对一的,其中一个表的公共列有重复值,另一个表的公共列是唯一的。
成绩表:
学生信息表:
import pandas as pd
score_df = pd.read_excel(r'C:\Users\viruser.v-desktop\Desktop\成绩表.xlsx')
print(score_df)
复制代码
result:
学号 姓名 成绩 考试时间
0 0 小明 90 期中
1 1 小刚 89 期末
2 2 小红 98 期中
3 3 小兰 63 期末
4 4 李华 95 期中
5 5 张三 23 期末
6 6 李四 56 期中
7 7 王五 85 期末
8 8 小张 75 期中
9 0 小明 90 期末
10 1 小刚 148 期中
11 2 小红 125 期末
12 3 小兰 115 期中
13 4 李华 150 期末
14 5 张三 89 期中
15 6 李四 45 期末
16 7 王五 135 期中
17 8 小张 126 期末
复制代码
info_df = pd.read_excel(r'C:\Users\viruser.v-desktop\Desktop\学生信息表.xlsx')
print(info_df)
复制代码
result:
学号 年级 班级
0 0 三年级 二班
1 1 五年级 三班
2 2 六年级 一班
3 3 一年级 五班
4 4 三年级 二班
5 5 四年级 三班
6 6 三年级 二班
7 7 二年级 一班
8 8 五年级 二班
复制代码
new_df = pd.merge(score_df, info_df)
print(new_df)
复制代码
result:
学号 姓名 成绩 考试时间 年级 班级
0 0 小明 90 期中 三年级 二班
1 0 小明 90 期末 三年级 二班
2 1 小刚 89 期末 五年级 三班
3 1 小刚 148 期中 五年级 三班
4 2 小红 98 期中 六年级 一班
5 2 小红 125 期末 六年级 一班
6 3 小兰 63 期末 一年级 五班
7 3 小兰 115 期中 一年级 五班
8 4 李华 95 期中 三年级 二班
9 4 李华 150 期末 三年级 二班
10 5 张三 23 期末 四年级 三班
11 5 张三 89 期中 四年级 三班
12 6 李四 56 期中 三年级 二班
13 6 李四 45 期末 三年级 二班
14 7 王五 85 期末 二年级 一班
15 7 王五 135 期中 二年级 一班
16 8 小张 75 期中 五年级 二班
17 8 小张 126 期末 五年级 二班
复制代码
3 多对多拼接
多对多连接就是待连接的两个表的公共列不是一对一的,且2个表中的公共列都有重复值,多对多连接相当于多个多对一连接
商品信息表
用户购物表
import pandas as pd
goods_df = pd.read_excel(r'C:\Users\viruser.v-desktop\Desktop\商品信息表.xlsx')
print(goods_df)
复制代码
result:
分类 商品编号 商品名称
0 水果 0 苹果
1 水果 1 橙子
2 生活用品 2 牙刷
3 生活用品 3 冰箱
4 生活用品 4 电视机
5 食物 0 苹果
6 食物 1 橙子
7 家电 3 冰箱
8 家电 4 电视机
9 大件 3 冰箱
10 大件 4 电视机
复制代码
user_df = pd.read_excel(r'C:\Users\viruser.v-desktop\Desktop\用户购物表.xlsx')
print(user_df)
复制代码
result:
用户名 商品编号
0 小明 0
1 小明 2
2 小明 4
3 小刚 7
4 小刚 5
5 小刚 4
6 小刚 3
复制代码
new_df = pd.merge(goods_df, user_df)
print(new_df)
复制代码
result:
分类 商品编号 商品名称 用户名
0 水果 0 苹果 小明
1 食物 0 苹果 小明
2 生活用品 2 牙刷 小明
3 生活用品 3 冰箱 小刚
4 家电 3 冰箱 小刚
5 大件 3 冰箱 小刚
6 生活用品 4 电视机 小明
7 生活用品 4 电视机 小刚
8 家电 4 电视机 小明
9 家电 4 电视机 小刚
10 大件 4 电视机 小明
11 大件 4 电视机 小刚
复制代码
4 on参数的使用
on参数一般用于指定连接键,即两个表中的公共列。此时和前面使用默认的公共列效果是一样的
商品信息表
用户购物表
import pandas as pd
goods_df = pd.read_excel(r'C:\Users\viruser.v-desktop\Desktop\商品信息表.xlsx')
print(goods_df)
复制代码
result:
分类 商品编号 商品名称
0 水果 0 苹果
1 水果 1 橙子
2 生活用品 2 牙刷
3 生活用品 3 冰箱
4 生活用品 4 电视机
5 食物 0 苹果
6 食物 1 橙子
7 家电 3 冰箱
8 家电 4 电视机
9 大件 3 冰箱
10 大件 4 电视机
复制代码
user_df = pd.read_excel(r'C:\Users\viruser.v-desktop\Desktop\用户购物表.xlsx')
print(user_df)
复制代码
result:
用户名 商品编号
0 小明 0
1 小明 2
2 小明 4
3 小刚 7
4 小刚 5
5 小刚 4
6 小刚 3
复制代码
new_df = pd.merge(goods_df, user_df, on=['商品编号'])
print(new_df)
复制代码
result:
分类 商品编号 商品名称 用户名
0 水果 0 苹果 小明
1 食物 0 苹果 小明
2 生活用品 2 牙刷 小明
3 生活用品 3 冰箱 小刚
4 家电 3 冰箱 小刚
5 大件 3 冰箱 小刚
6 生活用品 4 电视机 小明
7 生活用品 4 电视机 小刚
8 家电 4 电视机 小明
9 家电 4 电视机 小刚
10 大件 4 电视机 小明
11 大件 4 电视机 小刚
复制代码
5 公共列有多列时的连接
商品信息表
用户购物表
import pandas as pd
goods_df = pd.read_excel(r'C:\Users\viruser.v-desktop\Desktop\商品信息表.xlsx')
print(goods_df)
复制代码
result:
分类 商品编号 商品名称
0 水果 0 苹果
1 水果 1 橙子
2 生活用品 2 牙刷
3 生活用品 3 冰箱
4 生活用品 4 电视机
5 食物 0 苹果
6 食物 1 橙子
7 家电 3 冰箱
8 家电 4 电视机
9 大件 3 冰箱
10 大件 4 电视机
11 大件 5 茶几
12 生活用品 7 暖手宝宝
复制代码
user_df = pd.read_excel(r'C:\Users\viruser.v-desktop\Desktop\用户购物表.xlsx')
print(user_df)
复制代码
result:
用户名 商品编号 商品名称
0 小明 0 苹果
1 小明 2 牙刷
2 小明 4 电视机
3 小刚 7 暖手宝宝
4 小刚 5 茶几
5 小刚 4 电视机
6 小刚 3 冰箱
复制代码
new_df = pd.merge(goods_df, user_df)
print(new_df)
复制代码
result:
分类 商品编号 商品名称 用户名
0 水果 0 苹果 小明
1 食物 0 苹果 小明
2 生活用品 2 牙刷 小明
3 生活用品 3 冰箱 小刚
4 家电 3 冰箱 小刚
5 大件 3 冰箱 小刚
6 生活用品 4 电视机 小明
7 生活用品 4 电视机 小刚
8 家电 4 电视机 小明
9 家电 4 电视机 小刚
10 大件 4 电视机 小明
11 大件 4 电视机 小刚
12 大件 5 茶几 小刚
13 生活用品 7 暖手宝宝 小刚
复制代码
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END