Task06-连接

datawhale组队学习 Task06 连接
https://datawhalechina.github.io/joyful-pandas/build/html/%E7%9B%AE%E5%BD%95/ch6.html

第六章 连接

一、关系型连接

  1. 连接的基本概念
    要想连接两张相关的表,则需通过其键来连接;同时pandas中提供了merge,concat等连接函数。关系型连接函数 merge 和 join 中提供了 how 参数来代表连接形式,分为左连接 left 、右连接 right 、内连接 inner 、外连接 outer ,它们的区别可以用如下示意图表示:
    在这里插入图片描述
    从图中可以看到,所谓左连接即以左表的键为准,如果右表中的键于左表存在,那么就添加到左表,否则则处理为缺失值,右连接类似处理。内连接只负责合并两边同时出现的键,而外连接则会在内连接的基础上包含只在左边出现以及只在右边出现的值,因此外连接又叫全连接。
    上面这个简单的例子中,同一个表中的键没有出现重复的情况,那么如果出现重复的键应该如何处理?只需把握一个原则,即只要两边同时出现的值,就以笛卡尔积的方式加入,如果单边出现则根据连接形式进行处理。其中,关于笛卡尔积可用如下例子说明:设左表中键 张三 出现两次,右表中的 张三 也出现两次,那么逐个进行匹配,最后产生的表必然包含 2*2 个姓名为 张三 的行。下面是一个对应例子的示意图:

在这里插入图片描述
2. 值连接
基于列值的连接在 pandas 中可以由 merge 函数实现,例如第一张图的左连接:

import pandas as pd
df1 = pd.DataFrame({'Name':['张三','李四'],
                        'Age':[20,30]})
df2 = pd.DataFrame({'Name':['李四','王五'],
                     'Gender':['F','M']})
df1.merge(df2, on='Name', how='left')
Name	Age	Gender
0	张三	20	NaN
1	李四	30	F

如果两个表中想要连接的列不具备相同的列名,可以通过 left_on 和 right_on 指定:

df1 = pd.DataFrame({'df1_name':['San Zhang','Si Li'],
                     'Age':[20,30]}) 
df2 = pd.DataFrame({'df2_name':['Si Li','Wu Wang'],
                        'Gender':['F','M']})
df1.merge(df2, left_on='df1_name', right_on='df2_name', how='left')
df1_name	    Age	    df2_name	Gender
0	San Zhang	20	    NaN	         NaN
1	Si Li	    30	    Si Li	       F

如果两个表中的列出现了重复的列名,那么可以通过 suffixes 参数指定。例如合并考试成绩的时候,第一个表记录了语文成绩,第二个是数学成绩:

df1= pd.DataFrame({'Name':['San Zhang'],'Grade':[70]})

df2 = pd.DataFrame({'Name':['San Zhang'],'Grade':[80]})

df1.merge(df2, on='Name', how='left', suffixes=['_Chinese','_Math']) 
            Age	  Gender
Name		
San Zhang	20	 NaN
Si Li	    30	 F
  1. 索引连接
    所谓索引连接,就是把索引当作键,因此这和值连接本质上没有区别, pandas 中利用 join 函数来处理索引连接,它的参数选择要少于 merge ,除了必须的 on 和 how 之外,可以对重复的列指定左右后缀 lsuffix 和 rsuffix 。其中, on 参数指索引名,单层索引时省略参数表示按照当前索引连接。
df1 = pd.DataFrame({'Age':[20,30]},
                     index=pd.Series(
                    ['San Zhang','Si Li'],name='Name'))

df2 = pd.DataFrame({'Gender':['F','M']},
                    index=pd.Series(
                    ['Si Li','Wu Wang'],name='Name'))
df1.join(df2, how='left')
     Name	    Grade	 Gender
0	San Zhang	70	     NaN

仿照第2小节的例子,写出语文和数学分数合并的 join 版本:

df1 = pd.DataFrame({'Grade':[70]},
                   index=pd.Series(['San Zhang'],
                     name='Name')) 

df2 = pd.DataFrame({'Grade':[80]},
                     index=pd.Series(['San Zhang'],
                     name='Name'))
df1.join(df2, how='left', lsuffix='_Chinese', rsuffix='_Math')
         Grade_Chinese	        Grade_Math
Name		
San Zhang	70	                 80
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
redis-cli连接是指使用redis-cli命令行界面与Redis服务器建立连接的过程。redis-cli是Redis的命令行工具,可以通过它向Redis发送命令,并读取来自服务端的回复。通过输入redis-cli命令,可以连接到Redis服务器,默认连接的是Redis的0库。一旦成功连接上Redis,就可以执行各种操作,比如设置键值对、获取键的值等。例如,使用set命令可以将键a的值设置为a,返回结果为OK。所以redis-cli连接就是建立与Redis服务器的客户端连接,以便通过命令行界面进行数据操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [redis-cli使用说明](https://blog.csdn.net/ppjsyw/article/details/124845948)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [Redis(学习目标、Redis安装及介绍、Redis-cli操作Redis、Java操作Redis、Redis持久化方案、Redis搭载主从...](https://blog.csdn.net/weixin_44911308/article/details/108873991)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值