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

1.Python高频函数—数据合并merge()前言 数据处理中经常对多个表的数据进行合并处理 python 提供两个十分好用的函数处理 merge concat merger 函数是 Python 里的数据分析工作中最常见的函数之一 主要应用场景是 针对同一个主键存在两张不同字段的表 这里强调只能用于 2 张表的合并 merge 函数

大家好,我是讯享网,很高兴认识大家。

前言

数据处理中经常对多个表的数据进行合并处理,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   NRAS exon4 chr1   NRAS exon3 chr1   NRAS exon2

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

panel_exp_data = pd.read_csv("panel_exp.bed", sep="\t") panel_exp.bed: Chrom Start End Gene Transcript CytoBand chr1   NRAS NM_002524.4 chr1:p13.2 chr1   NRAS NM_002524.4 chr1:p13.2 chr1   NRAS NM_002524.4 chr1:p13.2 chr2   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   NRAS exon4 NM_002524.4 chr1:p13.2 1 chr1   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   NRAS exon4 NRAS NM_002524.4 chr1:p13.2 1 chr1   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   NRAS exon4 NM_002524.4 chr1:p13.2 1 chr1   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   NRAS exon4 chr1   NRAS NM_002524.4 chr1:p13.2 1 chr1   NRAS exon3 chr1   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   NRAS exon4 chr1   NRAS NM_002524.4 chr1:p13.2 1 chr1   NRAS exon3 chr1   NRAS NM_002524.4 chr1:p13.2

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

小讯
上一篇 2025-01-05 23:57
下一篇 2025-01-14 12:14

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/41721.html