合并pandas中的两个文件

2024-04-20 10:53:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两份资料档案。我需要合并/联接给定列中相同的两个文件中的行。在

文件A:

#chr    #start  #end    #gene   #0  #strand
chrM    3307    4262    MT-ND1  0   +
chrM    4470    5511    MT-ND2  0   +
chrM    12337   14148   MT-ND5  0   +

文件B:

^{2}$

我的结果输出应该如下所示(基本上文件B与文件A排序类似):

#chr    #start  #end    #gene   #0  #strand #e_chr #e_start #e_end      #e_id                      #0   #strand
chr1    3307    4262    MT-ND1  0   +   chr1    161423805   161424053   Larp7-Chip.MACS2_peak_9703  0   .
chr1    4470    5511    MT-ND2  0   +   chr1    161429385   161429489   Larp7-Chip.MACS2_peak_9705  0   .
chr1    12337   14148   MT-ND5  0   +   chr1    161427010   161427243   Larp7-Chip.MACS2_peak_9704  0   .

我尝试使用pandas.DataFrame.merge来执行以下操作:

import pandas as pd
import numpy as np

FileA = pd.read_table("FileA.txt")
FileB = pd.read_table("FileB.txt")

results = FileA.merge(FileB, how='left', left_on='gene', right_on='gene')
results = results.dropna()

一开始这似乎很管用,但有些行不见了。文件A有19000行,文件B有4800行。但是我的输出文件只有大约3,8k,而我期望它有4800。我做错什么了?有什么更简单的方法吗?我是python新手。在


Tags: 文件startendpdchipchr1genemt
1条回答
网友
1楼 · 发布于 2024-04-20 10:53:11

按照您的描述,您应该使用how='right'或者,或者:FileB.merge(FileA, how='left', on='gene')

说明:

In [171]: a
Out[171]:
   id col1 col2
0   1    a   aa
1   2    b   bb
2   3    c   cc
3   4    d   dd
4   5    e   ee

In [172]: b
Out[172]:
   id col1 col2
0   2    x   xx
1   4    y   yy

将来自a的所有行与来自b匹配的行合并:a.merge(b, how='left')

^{pr2}$

将来自b的所有行与来自a匹配的行合并:b.merge(a, how='left')

In [174]: b.merge(a, on='id', how='left')
Out[174]:
   id col1_x col2_x col1_y col2_y
0   2      x     xx      b     bb
1   4      y     yy      d     dd

或者:

In [175]: a.merge(b, on='id', how='right')
Out[175]:
   id col1_x col2_x col1_y col2_y
0   2      b     bb      x     xx
1   4      d     dd      y     yy

相关问题 更多 >