当前位置: 首页 > news >正文

数据分析必备:一步步教你如何用Pandas做数据分析(17)

1、Pandas 连接

Pandas 连接的操作实例
Pandas具有与SQL等关系数据库非常相似的功能齐全的高性能内存中连接操作。
Pandas提供单个功能merge作为DataFrame对象之间所有标准数据库联接操作的入口点

pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None,left_index=False, right_index=False, sort=True)

在这里,我们使用了以下参数:
left − 一个DataFrame对象。
right − 另一个DataFrame对象。
on − 列(名)加入上。必须在左右DataFrame对象中都找到。
left_on − 左侧DataFrame中的列用作键。可以是列名,也可以是长度等于DataFrame长度的数组。
right_on − 右侧DataFrame中的列用作键。可以是列名,也可以是长度等于DataFrame长度的数组。
left_index − 如果为True,则使用左侧DataFrame的索引(行标签)作为其连接键。如果DataFrame具有MultiIndex(分层),则级别数必须与右侧DataFrame中的连接键数匹配。
right_index − 相同的使用作为left_index为正确的数据帧。
how − “左”,“右”,“外”,“内”之一。默认为内部。每种方法已在下面描述。
sort − 排序的结果数据框中加入字典顺序按键。默认情况下为True,在许多情况下,设置为False将大大提高性能。
现在让我们创建两个不同的DataFrame并对其执行合并操作。

import pandas as pd
left = pd.DataFrame({'id':[1,2,3,4,5],'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],'subject_id':['sub1','sub2','sub4','sub6','sub5']})
right = pd.DataFrame({'id':[1,2,3,4,5],'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],'subject_id':['sub2','sub4','sub3','sub6','sub5']})
print(left)
print(right)

运行结果

   id    Name subject_id
0   1    Alex       sub1
1   2     Amy       sub2
2   3   Allen       sub4
3   4   Alice       sub6
4   5  Ayoung       sub5id   Name subject_id
0   1  Billy       sub2
1   2  Brian       sub4
2   3   Bran       sub3
3   4  Bryce       sub6
4   5  Betty       sub5

1.1、在一个键上合并两个数据框

import pandas as pd
left = pd.DataFrame({'id': [1, 2, 3, 4, 5],'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],'subject_id': ['sub1', 'sub2', 'sub4', 'sub6', 'sub5']})
right = pd.DataFrame({'id': [1, 2, 3, 4, 5],'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],'subject_id': ['sub2', 'sub4', 'sub3', 'sub6', 'sub5']})
print(pd.merge(left, right, on='id'))

运行结果

   id  Name_x subject_id_x Name_y subject_id_y
0   1    Alex         sub1  Billy         sub2
1   2     Amy         sub2  Brian         sub4
2   3   Allen         sub4   Bran         sub3
3   4   Alice         sub6  Bryce         sub6
4   5  Ayoung         sub5  Betty         sub5

1.2、在多个键上合并两个数据框

import pandas as pd
left = pd.DataFrame({'id':[1,2,3,4,5],'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],'subject_id':['sub1','sub2','sub4','sub6','sub5']})
right = pd.DataFrame({'id':[1,2,3,4,5],'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],'subject_id':['sub2','sub4','sub3','sub6','sub5']})
print(pd.merge(left,right,on=['id','subject_id']))

运行结果

   id  Name_x subject_id Name_y
0   4   Alice       sub6  Bryce
1   5  Ayoung       sub5  Betty

1.3、合并使用“how”参数

合并的how参数指定如何确定要在结果表中包括哪些键。如果左侧或右侧表中均未出现组合键,则联接表中的值为NA。
这里的一个总结如何选择和他们的SQL等价的名字:
在这里插入图片描述

1.4、左连接

import pandas as pd
left = pd.DataFrame({'id':[1,2,3,4,5],'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],'subject_id':['sub1','sub2','sub4','sub6','sub5']})
right = pd.DataFrame({'id':[1,2,3,4,5],'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],'subject_id':['sub2','sub4','sub3','sub6','sub5']})
print(pd.merge(left, right, on='subject_id', how='left'))

运行结果

 id_x  Name_x subject_id  id_y Name_y
0     1    Alex       sub1   NaN    NaN
1     2     Amy       sub2   1.0  Billy
2     3   Allen       sub4   2.0  Brian
3     4   Alice       sub6   4.0  Bryce
4     5  Ayoung       sub5   5.0  Betty

1.5、右连接

import pandas as pd
left = pd.DataFrame({'id':[1,2,3,4,5],'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],'subject_id':['sub1','sub2','sub4','sub6','sub5']})
right = pd.DataFrame({'id':[1,2,3,4,5],'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],'subject_id':['sub2','sub4','sub3','sub6','sub5']})
print(pd.merge(left, right, on='subject_id', how='right'))

运行结果

  id_x  Name_x subject_id  id_y Name_y
0   2.0     Amy       sub2     1  Billy
1   3.0   Allen       sub4     2  Brian
2   NaN     NaN       sub3     3   Bran
3   4.0   Alice       sub6     4  Bryce
4   5.0  Ayoung       sub5     5  Betty

1.6、外连接

import pandas as pdleft = pd.DataFrame({'id':[1,2,3,4,5],'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],'subject_id':['sub1','sub2','sub4','sub6','sub5']})right = pd.DataFrame({'id':[1,2,3,4,5],'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],'subject_id':['sub2','sub4','sub3','sub6','sub5']})print(pd.merge(left, right, how='outer', on='subject_id'))

运行结果

 id_x  Name_x subject_id  id_y Name_y
0   1.0    Alex       sub1   NaN    NaN
1   2.0     Amy       sub2   1.0  Billy
2   NaN     NaN       sub3   3.0   Bran
3   3.0   Allen       sub4   2.0  Brian
4   5.0  Ayoung       sub5   5.0  Betty
5   4.0   Alice       sub6   4.0  Bryce

1.7、内连接

连接将在索引上执行。联接操作接受调用它的对象。因此,a.join(b)不等于b.join(a)。

import pandas as pdleft = pd.DataFrame({'id':[1,2,3,4,5],'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],'subject_id':['sub1','sub2','sub4','sub6','sub5']})right = pd.DataFrame({'id':[1,2,3,4,5],'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],'subject_id':['sub2','sub4','sub3','sub6','sub5']})print(pd.merge(left, right, on='subject_id', how='inner'))

运行结果

  id_x  Name_x subject_id  id_y Name_y
0     2     Amy       sub2     1  Billy
1     3   Allen       sub4     2  Brian
2     4   Alice       sub6     4  Bryce
3     5  Ayoung       sub5     5  Betty
http://www.lryc.cn/news/364031.html

相关文章:

  • 检查用户是否在错误的目录中运行了CMake命令
  • 前端工程化工具系列(四)—— Commitlint(v19.3.0):规范化 Git 提交
  • <vs2022><问题记录>visual studio 2022使用console打印输出时,输出窗口不显示内容
  • 推荐一个免费的相亲工具
  • 写一个盲盒模拟器
  • Java使用正则表达式匹配以某个字符开始,某个字符结束
  • 什么叫硬编码?如何避免硬编码
  • RK3588 Android13自定义一个按键实现长按短按
  • 映射网络驱动器自动断开的解决方法
  • (Arkts界面示例)ets pages Demo(笔记版本0.0.1)
  • Python 动态导入库
  • 【WP|8】深入解析WordPress钩子函数
  • Java集合简略记录
  • 能获取淘宝商品简化链接的浏览器书签
  • JMeter Plugins Manager---插件安装
  • docker-compose入门级实战教程
  • MATLAB sort
  • AB测试实战
  • Java高级面试精粹:问题与解答集锦(六)
  • MySQL之数据库数据库范式学习笔记(二)
  • 【Qt】 new成功,但是没有进入到构造函数。
  • 高清多媒体接口(High Definition Multimedia Interface, HDMI)
  • Spring AI 第二讲 之 Chat Model API 第五节HuggingFace Chat
  • 【笔记】Sturctured Streaming笔记总结(Python版)
  • Python函数进阶
  • [知识点]c++ delete与delete[ ]
  • iCloud如何被高效利用?
  • 月入30000的软件测试人员,简历是什么样子的?
  • nginx官网源代码方式安装nginx并编译
  • iOS ActivityViewController使用