繁体   English   中英

合并熊猫中的两个文件

[英]Merging two files in pandas

我有两个信息文件。 我需要合并/合并来自给定列中相同文件的行。

档案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:

#chr    #start  #end    #gene   #0  #strand #e_chr #e_start #e_end      #e_id                      #0   #strand
chr1    12337   14148   MT-ND5  0   +   chr1    161427010   161427243   Larp7-Chip.MACS2_peak_9704  0   .
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   .

我的结果输出应类似于(基本上与文件A排序类似的文件B):

#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来使用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有19,000行,文件B有4800行。 但是我的输出文件只有大约3.8k,而我希望它有4,800。 我究竟做错了什么? 有没有更简单的方法可以做到这一点? 我是python的新手。

按照您的描述,您应该使用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只有那些从符合该ba.merge(b, how='left')

In [173]: a.merge(b, on='id', how='left')
Out[173]:
   id col1_x col2_x col1_y col2_y
0   1      a     aa    NaN    NaN
1   2      b     bb      x     xx
2   3      c     cc    NaN    NaN
3   4      d     dd      y     yy
4   5      e     ee    NaN    NaN

合并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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM