主键合并数据准备数据
- 准备数据
- 准备数据meal_order_detail1.csv,并将数据文件meal_order_detail1.csv放到Linux本地的/course/DataAnalyze/data目录下。
- 准备数据meal_order_detail2.csv,并将数据文件meal_order_detail2.csv放到Linux本地的/course/DataAnalyze/data目录。
- 准备数据meal_order_detail3.csv” ,并将数据文件meal_order_detail3.csv放到Linux本地的/course/DataAnalyze/data目录。
- 准备数据meal_order_info.csv” ,并将数据文件meal_order_info.csv放到Linux本地的/course/DataAnalyze/data目录。
- 准备数据users_info.xlsx” ,并将数据文件users_info.xlsx放到Linux本地的/course/DataAnalyze/data目录。
- 主键合并数据
- pandas库中的merge函数和join方法都可以实现主键合并,但两者的实现方式并不相同。使用merge函数合并订单详情表和订单信息表,如代码 45所示。
In[4]: | import os os.chdir('/course/DataAnalyze/data') detail1= pd.read_csv ('meal_order_detail1.csv') order = pd.read_csv('./meal_order_info.csv',sep=',',encoding='gb18030', engine='python') ##读取订单信息表 order['info_id'] = order['info_id'].astype(int) ##info_id转换为字符串格式,为合并做准备 ## 订单详情表和订单信息表都有订单编号 ##在订单详情表中为order_id,在订单信息表中为info_id order_detail = pd.merge(detail1,order,left_on='order_id',right_on = 'info_id') print('detail1订单详情表的原始形状为:',detail1.shape) print('order订单信息表的原始形状为:',order.shape) print('订单详情表和订单信息表主键合并后的形状为:',order_detail.shape) |
Out[4]: | detail1订单详情表的原始形状为: (2779, 19) order订单信息表的原始形状为: (945, 21) 订单详情表和订单信息表主键合并后的形状为: (2779, 40) |
- 订单详情表、订单信息表和客户信息表两两之间存在相同意义的字段,因此需通过主键合并的方式将三张表合并为一张宽表,如代码 47所示。
In[8]: | order = pd.read_csv('./meal_order_info.csv',sep=',',encoding='gb18030', engine='python') ##读取订单信息表 user = pd.read_excel('./users_info.xlsx') ##读取用户信息表 ## 数据类型转换,存储部分数据 order['info_id'] = order['info_id'].astype(int) order['emp_id'] = order['emp_id'].astype(int) user['USER_ID'] = user['USER_ID'].astype(int) data = pd.merge(detail,order,left_on=['order_id','emp_id'],right_on = ['info_id','emp_id']) data = pd.merge(data,user,left_on='emp_id',right_on = 'USER_ID',how = 'inner') print('三张表数据主键合并后的大小为:',data.shape) |
Out[8]: | 三张表数据主键合并后的大小为: (14713, 76) |