1.Python高频函数—数据合并merge()

news2024/11/17 21:21:39

前言

数据处理中经常对多个表的数据进行合并处理,python 提供两个十分好用的函数处理。merge() 、 concat()

merger函数是Python里的数据分析工作中最常见的函数之一,主要应用场景是:针对同一个主键存在两张不同字段的表。(这里强调只能用于2张表的合并)

merge函数

简要的罗列函数的构成和参数的介绍

pd.merge(left: 'DataFrame | Series',  			# 参与合并的左侧DataFrame对象。
    right: 'DataFrame | Series',			# 参与合并的右侧DataFrame对象。
    how: 'str' = 'inner',  				# 要执行的连接方式,可选{'left','right','outer','inner','cross'},默认为'inner'。
    on: 'IndexLabel | None' = None,  			# 用于连接的列索引名称(即列标签名),该键必须存在于左右两个DataFrame中。若没有指定,则以列名的交集作为连接键。
    left_on: 'IndexLabel | None' = None,		# 指定左侧DataFrame中用于连接键的列名。
    right_on: 'IndexLabel | None' = None,  		# 指定右侧DataFrame中用于连接键的列名。
    left_index: 'bool' = False,				# 使用左侧DataFrame中的行索引作为连接键;
    right_index: 'bool' = False,  			# 使用右侧DataFrame中的行索引作为连接键;
    sort: 'bool' = False,  				# DataFrame对象结果中,按词典顺序排序,默认False。
    suffixes: 'Suffixes' = ('_x', '_y'),  		# 指定左右DataFrame存在相同列名时,为其添加后缀。
    copy: 'bool' = True,
    indicator: 'bool' = False,  			# 输出结果中添加_merge列,表明每一行使用的左右键来源情况。
    validate: 'str | None' = None 			# 验证连接键在左侧、右侧或两侧是否唯一,即'1:1','1:m','m:1'。
)

函数应用示例

首先我有两张表,如下: 第一张表包含了:位点的位置信息、基因、外显子

panel_data = pd.read_csv("panel.bed", sep="\t")
panel.bed:
Chrom	Start	End	Gene	Exon
chr1	115252169	115252369	NRAS	exon4
chr1	115256380	115256619	NRAS	exon3
chr1	115258644	115258814	NRAS	exon2

第二张表包含了:位点的位置信息、基因、转录本、染色臂

panel_exp_data = pd.read_csv("panel_exp.bed", sep="\t")

panel_exp.bed:
Chrom	Start	End	Gene	Transcript	CytoBand
chr1	115252169	115252369	NRAS	NM_002524.4	chr1:p13.2
chr1	115256380	115256619	NRAS	NM_002524.4	chr1:p13.2
chr1	115256882	115256919	NRAS	NM_002524.4	chr1:p13.2
chr2	29432621	29432778	ALK	NM_004304.4	chr2:p23.2

需求:根据位点的位置信息, 将两个表合并。

最简单当然直接用默认值

默认值没有指定连接的列索引名称,以列名的交集作为连接键。两个表共同的键["Chrom", "Start", "End", ”Gene“]

data_meg = pd.merge(panel_data, panel_exp_data)
print(data_meg)

output:
    Chrom      Start        End Gene   Exon   Transcript    CytoBand
0  chr1  115252169  115252369   NRAS  exon4  NM_002524.4  chr1:p13.2
1  chr1  115256380  115256619   NRAS  exon3  NM_002524.4  chr1:p13.2

参数on

指定用于连接的列索引名称(即列标签名),该键必须存在于左右两个DataFrame中。若没有指定,则以列名的交集作为连接键。比如:on=["Chrom", "Start", "End"]

data_meg = pd.merge(panel_data, panel_exp_data, on=["Chrom",    "Start",   "End"])
print(data_meg)

output:
    Chrom      Start        End Gene_x   Exon Gene_y   Transcript    CytoBand
0  chr1  115252169  115252369   NRAS  exon4   NRAS  NM_002524.4  chr1:p13.2
1  chr1  115256380  115256619   NRAS  exon3   NRAS  NM_002524.4  chr1:p13.2

参数 how

指定要执行的连接方式,inner : 使用左右侧frame的键的交集;简单说,只输出两个表中共同有位点信息。

# how: 'str' = 'inner',
data_meg = pd.merge(panel_data, panel_exp_data)
data_meg_inner = pd.merge(panel_data, panel_exp_data,how='inner')
print(data_meg_inner)

output:
    Chrom      Start        End  Gene   Exon   Transcript    CytoBand
0  chr1  115252169  115252369  NRAS  exon4  NM_002524.4  chr1:p13.2
1  chr1  115256380  115256619  NRAS  exon3  NM_002524.4  chr1:p13.2

参数 left_on,right_on

当左右两个frame的连接键的名字相同时,可以直接用参数‘on’。左侧frame键名为大写,,右侧frame键名是小写,名字不一样但其内容实质相同。此时就用left_on和right_on参数以替代参数on。

data_meg_inner = pd.merge(panel_data, panel_exp_data,how='inner', left_on=['Chrom', 'Start', 'End'], right_on=['chrom', 'start', 'end'])
print(data_meg_inner)

output:
    Chrom      Start        End Gene_x   Exon chrom      start        end Gene_y   Transcript    CytoBand
0  chr1  115252169  115252369   NRAS  exon4  chr1  115252169  115252369   NRAS  NM_002524.4  chr1:p13.2
1  chr1  115256380  115256619   NRAS  exon3  chr1  115256380  115256619   NRAS  NM_002524.4  chr1:p13.2

参数suffixes

当左右frame存在相同列名时(比如Gene),通过该参数为其添加后缀。_x和_y是默认后缀

data_meg_inner = pd.merge(panel_data, panel_exp_data,how='inner', left_on=['Chrom', 'Start', 'End'], right_on=['chrom', 'start', 'end'], suffixes=('_panel', '_panel_exp'))
print(data_meg_inner)

output:
    Chrom      Start        End Gene_panel   Exon chrom      start        end Gene_panel_exp   Transcript    CytoBand
0  chr1  115252169  115252369       NRAS  exon4  chr1  115252169  115252369           NRAS  NM_002524.4  chr1:p13.2
1  chr1  115256380  115256619       NRAS  exon3  chr1  115256380  115256619           NRAS  NM_002524.4  chr1:p13.2

更多完整内容阅读原文:1.Python高频函数—数据合并merge() https://mp.weixin.qq.com/s/ezatpufJPeMwd8s8vqcXCw

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/604626.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《Kali渗透基础》05. 主动信息收集(二)

kali渗透 1:端口扫描2:UDP 扫描2.1:Scapy2.2:nmap 3:半开放扫描3.1:Scapy3.2:nmap3.3:hping3 4:全连接扫描4.1:Scapy4.2:nmap4.3:dmit…

前端web入门-CSS-day04

(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 目录 复合选择器 后代选择器 子代选择器 并集选择器 交集选择器 伪类选择器 伪类-超链接(拓…

leetcode95--不同的二叉搜索树 II(java)

不同的二叉搜索树 II leetcode95 -- 不同的二叉搜索树 II题目描述 解题思路代码演示二叉树专题 leetcode95 – 不同的二叉搜索树 II 原题链接: https://leetcode.cn/problems/unique-binary-search-trees-ii/ 题目描述 给你一个整数 n ,请你生成并返回所有由 n 个节…

HTTP协议+Ajax基本知识+axios+模板引擎的基本使用

1.客服端服务器 我们先来了解一下上网的目的是什么? 例如:刷微博、浏览新闻、在线听音乐、在线看电影、等等... 上网的本质目的:通过互联网的形式来 获取和消费资源 1.2 服务器 上网过程中,负责 存放和对外提供资源 的电脑&am…

dockers映射网络及数据卷

DOCKER docker run创建镜像时 1)检查本地是狗存在指定的惊像 2)利用镜像创建并启动一个容器 3)分配一个文件系统给容器,在只读的镜像曾外改在一层可读可写层 4)从宿主机配置的网桥接口中桥接一个虚拟机接口到容器…

springboot+vue实验室器材预约学习系统设计与实现

1、理论学习 深入学习Java Web开发技术。 在此基础上研究核心框架SpringBoot, MyBatis和Bootstrap等,为设计开发基于J2EE_SpringBoot的中药实验管理系统做好技术准备。 2.1功能要求 课题以提高中药实验开放共享、实施实验室网络化管理、提供优质的实验教学信息化服…

几何分布和负二项分布的关系

几何分布和负二项分布的关系 几何分布 在独立重复Bernoulli试验中,事件A首次发生时所进行的试验次数X服从几何分布 P ( X k ) ( 1 − p ) k − 1 p ( k 1 , 2 ⋯ ) E ( X ) 1 p 、 D ( X ) 1 − p p 2 P(Xk)(1-p)^{k-1}p(k…

sql server 字符串链接,及表连接多个值显示连接显示为一列 STUFF for xml path

sql server 字符串链接,及表连接多个值显示连接显示为一列 STUFF for xml path STUFF ( character_expression , start , length , replaceWith_expression ) 以下示例从第一个字符串 abcdef 的第 2 个位置 (b) 开始删除三个字符,然后在删除位置插入…

第10章_管理库表(DDL语句)

第10章_管理库表(DDL语句) 1. 基础知识 1.1 一条数据存储的过程 存储数据是处理数据的第一步 。只有正确地把数据存储起来,我们才能进行有效的处理和分析。否则,只能是一团乱麻,无从下手。那么,怎样才能把用户各种经营相关的、…

Oracle中的数据导出(2)

将Oracle数据库中的数据导出给其他的系统使用 怎么实现上述的这个需求呢? 这里我是使用spool脚本方法导出数据,其中在Oracle中的数据导出(1)http://t.csdn.cn/k5AOZ 已经描述了spool命令的使用。此篇我将使用spool命令脚本导出数据,下面是…

深入理解Linux虚拟内存管理(三)

系列文章目录 Linux 内核设计与实现 深入理解 Linux 内核(一) 深入理解 Linux 内核(二) Linux 设备驱动程序(一) Linux 设备驱动程序(二) Linux 设备驱动程序(三&#xf…

Stable Diffusion 超详细讲解

Stable Diffusion 超详细讲解 这篇文章是 《Stable Diffusion原理详解》的后续,在《Stable Diffusion原理详解》中我更多的是以全局视角讲解了 Stable Diffusion 的原理和工作流程,并未深入步骤细节。本文将在《Stable Diffusion原理详解》和《Diffusio…

【自用 三层代码结构】「go语言」项目中降低服务内的耦合性使用wire框架或工厂模式进行管理

文章目录 前言一、为什么需要分层?1. Server服务(向外暴露gRPC接口):2. API服务(向外暴露HTTP接口):3. domain模型的概念:DO(Domain Object):DTO&…

Docker安装Mysql教程(linux)

本文主要讲解如何使用Docker去安装mysql 一、搜索镜像 docker search mysql二、拉取镜像 不指定版本,默认为最新版,这里用的5.7 docker pull mysql:5.7三、创建容器(运行镜像) 1、内外都使用3306端口(确保你的宿主机3…

Umi微前端水印踩坑以及解决方案

最近公司需要在管理后台加一个水印方案~ 项目用的umi方案,以为就是改一个配置的问题,后来发现坑点还蛮多~ 希望此稳定能帮助到用umi 的你们. 一. 先来说说心路历程 坑点1 umi的水印适配只能在layout中进行配置,也就是路由配置中layout为false的页面无法配置水印,比如说登录页…

SCS【27】单细胞转录组之识别标记基因 (scran)

桓峰基因公众号推出单细胞生信分析教程并配有视频在线教程,目前整理出来的相关教程目录如下: Topic 6. 克隆进化之 Canopy Topic 7. 克隆进化之 Cardelino Topic 8. 克隆进化之 RobustClone SCS【1】今天开启单细胞之旅,述说单细胞测序的前世…

规则引擎架构-基于easy-rules

目录 概念理解实例和编码抽象出2条规则简单的规则引擎事实1的处理事实2的处理 easy-rules 规则的抽象和执行事实描述规则的抽象默认的规则 动态代理执行规则和动作规则的执行:org.jeasy.rules.core.DefaultRulesEngine#doFirepublic class RuleProxy implements Inv…

Java上进了,JDK21 要来了,并发编程再也不是噩梦了

更丝滑的并发编程模式 如果说之前的 JDK17你还觉得没必要折腾,那 JDK21确实有必要关注一下了。因为 JDK21 引入了一种新型的并发编程模式。 当前 Java 中的多线程并发编程绝对是另我们都非常头疼的一部分,感觉就是学起来难啃,用起来难用。但…

基础篇010.3 STM32驱动RC522 RFID模块之三:STM32软件模拟SPI驱动RC522

目录 1. 实验硬件及原理图 2. 利用STM32CubeMX创建MDK工程 2.1 STM32CubeMX工程创建 2.2 配置调试方式 2.3 配置时钟电路 2.4 配置时钟 2.5 配置GPIO 2.6 配置串口 2.7 项目配置 3. MDK工程驱动代码调试 3.1 按键、LED程序 3.2 SPI软件模拟程序 3.3 RC522驱动程序…

Unity制作二次元卡通渲染角色材质——1、资源分析

Unity制作二次元材质角色 回到目录 大家好,我是阿赵。 开始制作二次元角色材质之前,我觉得应该是先分析一下,我手上拿到的这个角色模型资源,总共有哪些信息是我们能用的。 所以这篇文章我不会分享具体的Shader,但我感觉…