龙空技术网

python - 如何应用pandas数据表的左连接、右连接和全连接

程序化交易A2Z 643

前言:

眼前大家对“python dup函数”都比较关心,各位老铁们都需要学习一些“python dup函数”的相关知识。那么小编同时在网上汇集了一些关于“python dup函数””的相关知识,希望各位老铁们能喜欢,我们快快来了解一下吧!

python的工具包pandas提供了内连接、外连接(左连接和右连接)和全连接方法,从而由dataframe生成信息更丰富的数据。本文简述pandas中的连接方法的应用举例。pandas中数据表连接的概念与一般数据库中对应的概念含义相同。

import panas as pd
数据准备

创建两个表:products 和 customers,内容如下:

product=pd.DataFrame({'Product_ID':[101,102,103,104,105,106,107,103,107],'Product_name':['手表','背包','鞋类','智能手机','书籍','食用油','笔记本电脑','鞋类','笔记本电脑'],'Category':['时装类','时装类','时装类','电子产品','学习用品','食材','电子产品','时装类','电子产品'],'Price':[299.0,1350.50,2999.0,14999.0,145.0,110.0,79999.0,2999.0,79999.0],'Seller_City':['上海','上海','北京','杭州','深圳','北京','广州','北京','广州']})

结果如下:

customer=pd.DataFrame({    'id':[1,2,3,4,5,6,7,8,9],    'name':['李丽','王晓薇','张静','薛紫薇','刘婷','刘铭','王涛','吴小刚','刘谦'],    'age':[20,25,15,10,30,65,35,18,23],    'Product_ID':[101,0,106,0,103,104,0,0,107],    'Purchased_Product':['手表','NA','食用油','NA','鞋类','智能手机','NA','NA','笔记本电脑'],    'City':['上海','北京','广州','深圳','深圳','北京','杭州','北京','上海']})
pandas提供的merge函数 和 内连接(inner join)

merge函数是pandas中操作dataframe数据常用的一个函数,其默认状态为执行内连接(inner join),要连接的两个dataframe为其中的两个参数,另一个参数是要建立的列名称。

pd.merge(product,customer,on='Product_ID')

基于product_id列,建立productcustomer两个表的内连接,结果如下图:

参数‘left_on’ 和 ‘right_on’ 分别为连表的键名称,可以用数组包括多个列。

pd.merge(product,customer,how='inner',left_on=['Product_ID','Seller_City'],right_on=['Product_ID','City'])

运行结果如下,

全连接(Full join)

如果想获取全部产品的信息,可以使用全连接,把product和customer两个dataframe结合起来。

pd.merge(product,customer,on='Product_ID',how='outer')

运行结果如下:

其中所有不匹配的行都标志为NaN。如果命令中有 indicator 参数,就会出现_merge列,

pd.merge(product,customer,on='Product_ID',how='outer',indicator=True)

结果如下:

左连接(left join)

如果想获取购买了商品的消费者的信息,可以使用 左连接。左连接和右连接都属于外连接。

pd.merge(product,customer,on='Product_ID',how='left')

执行结果如下,

右连接(right join)

如果想得到包括购买商品信息的消费者的数据表,则可以使用右连接,

pd.merge(product,customer,on='Product_ID',how='right')

结果如下图:

如何处理连接中出现的冗余/重复数据

建立一个product数据的副本,

product_dup=pd.DataFrame({'Product_ID':[101,102,103,104,105,106,107,103,107],'Product_name':['手表','背包','鞋类','智能手机','书籍','食用油','笔记本电脑','鞋类','笔记本电脑'],'Category':['时装类','时装类','时装类','电子产品','学习用品','食材','电子产品','时装类','电子产品'],'Price':[299.0,1350.50,2999.0,14999.0,145.0,110.0,79999.0,2999.0,79999.0],'Seller_City':['上海','上海','北京','杭州','深圳','北京','广州','北京','广州']})

执行以下命令:

pd.merge(product_dup,customer,how='inner',on='Product_ID')

结果如下图:

可以看到有重复的数据行,解决这一问题,可以在merge函数中使用 validate 参数,可设置为:‘one_to_one’, ‘one_to_many’, ‘many_to_one’, 和 ‘many_to_many’.

pd.merge(product_dup,customer,how='inner',on='Product_ID',validate='many_to_many')

运行结果如下:

pandas中dataframe数据表连接的概念,和关系数据库以及SQL语言中的概念具有相同的含义。

标签: #python dup函数