书接前文,当待连接的两个表里没有公共列时(这里是指列的实际内容是一样的,但是列名不同),需要指定公共列才可以进行拼接。
商品信息表
用户购物表
1 指定普通列名作为连接键
这个时候需要分别使用left_on、right_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 电视机
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, left_on="编号", right_on='商品代码')
print(new_df)
result:
分类 编号 名称 用户名 商品代码 货物
0 水果 0 苹果 小明 0 苹果
1 食物 0 苹果 小明 0 苹果
2 生活用品 2 牙刷 小明 2 牙刷
3 生活用品 3 冰箱 小刚 3 冰箱
4 家电 3 冰箱 小刚 3 冰箱
5 大件 3 冰箱 小刚 3 冰箱
6 生活用品 4 电视机 小明 4 电视机
7 生活用品 4 电视机 小刚 4 电视机
8 家电 4 电视机 小明 4 电视机
9 家电 4 电视机 小刚 4 电视机
10 大件 4 电视机 小明 4 电视机
11 大件 4 电视机 小刚 4 电视机
12 大件 5 茶几 小刚 5 茶几
13 生活用品 7 暖手宝宝 小刚 7 暖手宝宝
2 指定索引作为连接键
import pandas as pd
goods_df = pd.read_excel(r'C:\Users\viruser.v-desktop\Desktop\商品信息表.xlsx')
print(goods_df.columns)
result:
Index(['分类', '编号', '名称'], dtype='object')
user_df = pd.read_excel(r'C:\Users\viruser.v-desktop\Desktop\用户购物表.xlsx')
print(user_df.columns)
result:
Index(['用户名', '商品代码', '货物'], dtype='object')
由此可以看到,编号和商品名称这2个也是各自的表对应的索引,因此也可以设置left_index、right_index的值为True来指定两表使用索引作为连接键
import pandas as pd
goods_df = pd.read_excel(r'C:\Users\viruser.v-desktop\Desktop\商品信息表.xlsx')
print(goods_df)
new_df = pd.merge(goods_df, user_df, left_index=True, right_index=True)
print(new_df)
result:
分类 编号 名称 用户名 商品代码 货物
0 水果 0 苹果 小明 0 苹果
1 水果 1 橙子 小明 2 牙刷
2 生活用品 2 牙刷 小明 4 电视机
3 生活用品 3 冰箱 小刚 7 暖手宝宝
4 生活用品 4 电视机 小刚 5 茶几
5 食物 0 苹果 小刚 4 电视机
6 食物 1 橙子 小刚 3 冰箱
3 普通列名和索引进行混用
import pandas as pd
goods_df = pd.read_excel(r'C:\Users\viruser.v-desktop\Desktop\商品信息表.xlsx')
user_df = pd.read_excel(r'C:\Users\viruser.v-desktop\Desktop\用户购物表.xlsx')
new_df = pd.merge(goods_df, user_df, left_index=True, right_on='商品代码')
print(new_df)
result:
分类 编号 名称 用户名 商品代码 货物
0 水果 0 苹果 小明 0 苹果
1 水果 1 橙子 小明 2 牙刷
2 生活用品 2 牙刷 小明 4 电视机
3 生活用品 3 冰箱 小刚 7 暖手宝宝
4 生活用品 4 电视机 小刚 5 茶几
5 食物 0 苹果 小刚 4 电视机
6 食物 1 橙子 小刚 3 冰箱