[英]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
只有那些从符合该b
: a.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.