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

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':['上海','上海','北京','杭州','深圳','北京','广州','北京','广州']
})

结果如下:

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

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':['上海','北京','广州','深圳','深圳','北京','杭州','北京','上海']})
python如何应用pandas数据表的左连接右连接和全连接

pandas提供的merge函数 和 内连接(inner join)

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

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

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

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

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

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

运行结果如下,

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

全连接(Full join)

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

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

运行结果如下:

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

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

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

结果如下:

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

左连接(left join)

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

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

执行结果如下,

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

右连接(right join)

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

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

结果如下图:

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

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

建立一个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')

结果如下图:

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

可以看到有重复的数据行,解决这一问题,可以在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')

运行结果如下:

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

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

发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/76374
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!

(0)
股市刺客的头像股市刺客
上一篇 2024 年 7 月 11 日
下一篇 2024 年 7 月 11 日

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注