2014-02-11 101 views
0

我有2個(相當大的,〜15K線)CSV表中以下格式:匹配和合並兩個文本表?

Disease/Trait    Mapped_gene p-Value 
Wegener's granulomatosis HLA-DPB1  2.00E-50  
Wegener's granulomatosis TENM3 - DCTD 2.00E-06  
Brugada syndrome   SCN5A   1.00E-14  
Brugada syndrome   SCN10A   1.00E-68  
Brugada syndrome   HEY2 - NCOA7 5.00E-17  
Major depressive disorder IRF8 - FENDRR 3.00E-07  


Identifier Homologues Symbol 
CG11621  5286 HEY2 
CG11621  5287 IRF8 
CG11621  5287 PIK3C2B 
CG11621  5288 PIK3C2G 
CG11621  5288 PIK3C2G 
CG11949  2035 DCTD 
CG11949  2035 EPB41 
CG11949  2036 EPB41L1 
CG11949  2037 EPB41L2 

我想使用Python來比較表,例如,如果任何從表中的「符號」欄2匹配來自表1的「Mapped_gene」,來自每個表的匹配行可合併在一起並放入輸出文件中。

我試過使用熊貓插件,但無法使其工作。有沒有人有更好的想法?

謝謝。

+0

csv文件有多大?只是想想這可以在內存中完成,或者我需要一個數據庫嗎? – Crazyshezy

+0

〜15,000行? – cps1

+0

每個定位基因是否可以有多種疾病? (即,第一個表中的兩行或更多行在Mapped_gene列中具有相同的值) –

回答

0

這應該工作,只要你想:

import csv 

diseases = {} 

# Load the disease file in memory 
with csv.reader(open('table1.csv', 'rb')) as dfile: 
    # Skip the header 
    dfile.next() 
    for disease, gene, pvalue in dfile: 
     diseases[gene] = (disease, pvalue) 

with csv.reader(open('table2.csv', 'rb')) as idfile, csv.writer(open('output.csv', 'wb')) as output: 
    # Skip the header 
    idfile.next() 
    for ident, homologue, symbol in idfile: 
     if symbol in diseases: 
      output.writerow((ident, homologue, symbol) + diseases[symbol]) 

它假定Mapped_gene下每一個基因的名字是獨一無二的,雖然。它可以很容易地擴展到應付重複,否則。

+0

完美!非常感謝。 – cps1

+0

請注意,它會首先在內存中加載整個疾病文件。 15000行不應該太多(可能不到1MB),但是要記住,如果你去做某些事情(更多)更大 –