pandas之合并操作
Pandas 提供的 merge() 函数能够进行高效的合并操作,这与 SQL 关系型数据库的 MERGE 用法非常相似。从字面意思上不难理解,merge 翻译为“合并”,指的是将两个 DataFrame 数据表按照指定的规则进行连接,最后拼接成一个新的 DataFrame 数据表。
merge() 函数的法格式如下:
pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None,left_index=False, right_index=False, sort=True,suffixes=('_x', '_y'), copy=True)
参数说明,如下表所示:
| 参数名称 | 说明 |
|---|---|
| left/right | 两个不同的 DataFrame 对象。 |
| on | 指定用于连接的键(即列标签的名字),该键必须同时存在于左右两个 DataFrame 中,如果没有指定,并且其他参数也未指定, 那么将会以两个 DataFrame 的列名交集做为连接键。 |
| left_on | 指定左侧 DataFrame 中作连接键的列名。该参数在左、右列标签名不相同,但表达的含义相同时非常有用。 |
| right_on | 指定左侧 DataFrame 中作连接键的列名。 |
| left_index | 布尔参数,默认为 False。如果为 True 则使用左侧 DataFrame 的行索引作为连接键,若 DataFrame 具有多层 索引(MultiIndex),则层的数量必须与连接键的数量相等。 |
| right_index | 布尔参数,默认为 False。如果为 True 则使用左侧 DataFrame 的行索引作为连接键。 |
| how | 要执行的合并类型,从 {'left', 'right', 'outer', 'inner'} 中取值,默认为“inner”内连接。 |
| sort | 布尔值参数,默认为True,它会将合并后的数据进行排序;若设置为 False,则按照 how 给定的参数值进行排序。 |
| suffixes | 字符串组成的元组。当左右 DataFrame 存在相同列名时,通过该参数可以在相同的列名后附加后缀名,默认为('_x','_y')。 |
| copy | 默认为 True,表示对数据进行复制。 |
注意:Pandas 库的 merge() 支持各种内外连接,与其相似的还有 join() 函数(默认为左连接)。
下面创建两个不同的 DataFrame,然后对它们进行合并操作:
- import pandas as pd
- left = pd.DataFrame({
- 'id':[1,2,3,4],
- 'Name': ['Smith', 'Maiki', 'Hunter', 'Hilen'],
- 'subject_id':['sub1','sub2','sub4','sub6']})
- right = pd.DataFrame({
- 'id':[1,2,3,4],
- 'Name': ['William', 'Albert', 'Tony', 'Allen'],
- 'subject_id':['sub2','sub4','sub3','sub6']})
- print (left)
- print (right)
输出如下:
id Name subject_id
0 1 Smith sub1
1 2 Maiki sub2
2 3 Hunter sub4
3 4 Hilen sub6 id Name subject_id
0 1 William sub2
1 2 Albert sub4
2 3 Tony sub3
3 4 Allen sub6
1) 在单个键上进行合并操作
通过 on 参数指定一个连接键,然后对上述 DataFrame 进行合并操作:
- import pandas as pd
- left = pd.DataFrame({
- 'id':[1,2,3,4],
- 'Name': ['Smith', 'Maiki', 'Hunter', 'Hilen'],
- 'subject_id':['sub1','sub2','sub4','sub6']})
- right = pd.DataFrame({
- 'id':[1,2,3,4],
- 'Name': ['William', 'Albert', 'Tony', 'Allen'],
- 'subject_id':['sub2','sub4','sub3','sub6']})
- #通过on参数指定合并的键
- print(pd.merge(left,right,on='id'))
输出结果:
id Name_x subject_id_x Name_y subject_id_y
0 1 Smith sub1 William sub2
1 2 Maiki sub2 Albert sub4
2 3 Hunter sub4 Tony sub3
3 4 Hilen sub6 Allen sub6
2) 在多个键上进行合并操作
下面示例,指定多个键来合并上述两个 DataFrame 对象:
- import pandas as pd
- left = pd.DataFrame({
- 'id':[1,2,3,4],
- 'Name': ['Smith', 'Maiki', 'Hunter', 'Hilen'],
- 'subject_id':['sub1','sub2','sub4','sub6']})
- right = pd.DataFrame({
- 'id':[1,2,3,4],
- 'Name': ['Bill', 'Lucy', 'Jack', 'Mike'],
- 'subject_id':['sub2','sub4','sub3','sub6']})
- print(pd.merge(left,right,on=['id','subject_id']))
输出结果:
id Name_x subject_id Name_y
0 4 Hilen sub6 Mike
使用how参数合并
通过how参数可以确定 DataFrame 中要包含哪些键,如果在左表、右表都不存的键,那么合并后该键对应的值为 NaN。为了便于大家学习,我们将 how 参数和与其等价的 SQL 语句做了总结:
| Merge方法 | 等效 SQL | 描述 |
|---|---|---|
| left | LEFT OUTER JOIN | 使用左侧对象的key |
| right | RIGHT OUTER JOIN | 使用右侧对象的key |
| outer | FULL OUTER JOIN | 使用左右两侧所有key的并集 |
| inner | INNER JOIN | 使用左右两侧key的交集 |
1) left join
- import pandas as pd
- left = pd.DataFrame({
- 'id':[1,2,3,4],
- 'Name': ['Smith', 'Maiki', 'Hunter', 'Hilen'],
- 'subject_id':['sub1','sub2','sub4','sub6']})
- right = pd.DataFrame({
- 'id':[1,2,3,4],
- 'Name': ['Bill', 'Lucy', 'Jack', 'Mike'],
- 'subject_id':['sub2','sub4','sub3','sub6']})
- #以left侧的subject_id为键
- print(pd.merge(left,right,on='subject_id',how="left"))
输出结果:
id_x Name_x subject_id id_y Name_y
0 1 Smith sub1 NaN NaN
1 2 Maiki sub2 1.0 Bill
2 3 Hunter sub4 2.0 Lucy
3 4 Hilen sub6 4.0 Mike
2) right join
- import pandas as pd
- left = pd.DataFrame({
- 'id':[1,2,3,4],
- 'Name': ['Smith', 'Maiki', 'Hunter', 'Hilen'],
- 'subject_id':['sub1','sub2','sub4','sub6']})
- right = pd.DataFrame({
- 'id':[1,2,3,4],
- 'Name': ['Bill', 'Lucy', 'Jack', 'Mike'],
- 'subject_id':['sub2','sub4','sub3','sub6']})
- #以right侧的subject_id为键
- print(pd.merge(left,right,on='subject_id',how="right"))
输出结果:
id_x Name_x subject_id id_y Name_y
0 2.0 Maiki sub2 1 Bill
1 3.0 Hunter sub4 2 Lucy
2 4.0 Hilen sub6 4 Mike
3 NaN NaN sub3 3 Jack
3) outer join(并集)
- import pandas as pd
- left = pd.DataFrame({
- 'id':[1,2,3,4],
- 'Name': ['Smith', 'Maiki', 'Hunter', 'Hilen'],
- 'subject_id':['sub1','sub2','sub4','sub6']})
- right = pd.DataFrame({
- 'id':[1,2,3,4],
- 'Name': ['Bill', 'Lucy', 'Jack', 'Mike'],
- 'subject_id':['sub2','sub4','sub3','sub6']})
- #求出两个subject_id的并集,并作为键
- print(pd.merge(left,right,on='subject_id',how="outer"))
输出结果:
id_x Name_x subject_id id_y Name_y
0 1.0 Smith sub1 NaN NaN
1 2.0 Maiki sub2 1.0 Bill
2 3.0 Hunter sub4 2.0 Lucy
3 4.0 Hilen sub6 4.0 Mike
4 NaN NaN sub3 3.0 Jack
4) inner join(交集)
- import pandas as pd
- left = pd.DataFrame({
- 'id':[1,2,3,4],
- 'Name': ['Smith', 'Maiki', 'Hunter', 'Hilen'],
- 'subject_id':['sub1','sub2','sub4','sub6']})
- right = pd.DataFrame({
- 'id':[1,2,3,4],
- 'Name': ['Bill', 'Lucy', 'Jack', 'Mike'],
- 'subject_id':['sub2','sub4','sub3','sub6']})
- #求出两个subject_id的交集,并将结果作为键
- print(pd.merge(left,right,on='subject_id',how="inner"))
输出结果:
id_x Name_x subject_id id_y Name_y
0 2 Maiki sub2 1 Bill
1 3 Hunter sub4 2 Lucy
2 4 Hilen sub6 4 Mike
注意:当 a 与 b 进行内连操作时 a.join(b) 不等于 b.join(a)。
pandas之合并操作的更多相关文章
- Pandas | 19 合并/连接
Pandas具有功能全面的高性能内存中连接操作,与SQL等关系数据库非常相似.Pandas提供了一个单独的merge()函数,作为DataFrame对象之间所有标准数据库连接操作的入口 - pd.me ...
- Pandas的拼接操作
pandas的拼接操作 pandas的拼接分为两种: 级联:pd.concat, pd.append 合并:pd.merge, pd.join import pandas as pd import n ...
- 利用os和pandas来合并当前目录下所有excel文件
#1.引入模块 import os import pandas as pd #2.取出指定目录下的全部excel文件路径 path="C:\\TEST" dirlist=[] fo ...
- (四)pandas的拼接操作
pandas的拼接操作 #重点 pandas的拼接分为两种: 级联:pd.concat, pd.append 合并:pd.merge, pd.join 0. 回顾numpy的级联 import num ...
- pandas的级联操作
级联操作 pd.concat, pd.append import pandas as pd from pandas import DataFrame import numpy as np pandas ...
- eclipse svn分支与合并操作
以前做项目的时候没有用过svn的分支合并操作,今天用到了,刚开始还真不会啊.最后查了下就是这么的方便.专门记录下来. 原文来自:http://blog.csdn.net/lisq037/article ...
- C#文件的拆分与合并操作示例
C#文件的拆分与合并操作示例代码. 全局变量定义 ;//文件大小 //拆分.合并的文件数 int count; FileInfo splitFile; string splitFliePath; Fi ...
- pandas的apply操作
pandas的apply操作类似于Scala的udf一样方便,假设存在如下dataframe: id_part pred pred_class v_id 0 d [0.722817, 0.650064 ...
- pandas列合并为一行
将dataframe利用pandas列合并为一行,类似于sql的GROUP_CONCAT函数.例如如下dataframe id_part pred pred_class v_id 0 d 0 0.12 ...
- git分支与主干合并操作
git分支与主干合并操作1.主干合并分支在主干上合并分支 branch (master)git merge branch --squash 提交合并后的代码 (master)git commit -m ...
随机推荐
- COLMAP论文阅读笔记——sfm算法、不定期更新
文章目录 structure from motion revisited 第一步 对应点搜索 特征提取feature extraction 匹配matching 几何验证geometric verif ...
- Maven中的DependencyManagement 和 Dependencies
Maven 使用dependencyManagement 元素来提供了一种管理依赖版本号的方式. 通常会在一个组织或者项目的最顶层的父POM 中看到dependencyManagement 元素. 使 ...
- P1413 坚果保龄球
P1413 坚果保龄球 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 大家可以发现这里的坚果其实是火爆辣椒2333,那么我们要尽量多消灭僵尸,就需要在僵尸位于1列时在放置(ans+ ...
- 如何修改被编译后DLL文件 (转发)
我们平时在工作中经常会遇到一些已经被编译后的DLL,而且更加麻烦是没有源代码可以进行修改,只能针对这个DLL的文件进行修改才能得到我们想要的结果:本文将通过一个实例来演示如果完成一个简单的修改;我们将 ...
- git在linux安装步骤详解!!
linux上安装,以centos 7.x为例 yum命令安装 yum install gityum install 安装的git不是最新版本,如需最新版本需要自行编译 到下面的网站下载合适的版本 ht ...
- down_interruptible()获取信号量
信号量(Semaphore)是操作系统中最典型的用于同步和互斥的手段,信号量的值可以是0.1或者n.信号量与操作系统中的经典概念PV操作对应. P(S):①将信号量S的值减1,即S=S-1:②如果S≥ ...
- Vue3 向window注入方法 TS警告 元素隐式具有 "any" 类型,因为索引表达式的类型不为 "number" 问题解决。
window['funcName'] = function(){}; // 'funcName'会标红警告 (window as any).funcName = function(){}; // 正确 ...
- win10启动和安装nacos服务
https://blog.csdn.net/tbmingzhao/article/details/113276845
- 无显示器无键盘的树莓派搭建NAS(samba)
使用软件Rufus烧录系统2020-02-13-raspbian-buster.img到TF卡后,在TF卡的文件夹内创建空文件ssh,再创建一个名为wpa_supplicant.conf的文件,内容为 ...
- IT工具知识-12:RTL8832AU网卡在WIN10更新KB5015807后出现无法正常连接的一种解决方法
系统配置 硬件配置 使用网卡为Fenvi的FU-AX1800 USB外置网卡(官网驱动同AX1800P) 问题描述 在win10自动更新了KB5015807出现了wifi开机无法自动连接,wifi图标 ...