2014-02-11 4 views
0

I가 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 

나는 테이블을 비교하기 위해 파이썬을 사용하고 싶습니다 같은 그 경우 테이블에서 "기호"열 중 2가 표 1의 "Mapped_gene"과 일치하면 각 표의 일치하는 행을 함께 병합하여 출력 파일에 넣을 수 있습니다.

나는 Pandas 플러그인을 사용해 보았지만 제대로 작동하지 못했습니다. 누구든지 더 좋은 아이디어를 얻었습니까?

감사합니다.

+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 미만) 너무 많이해서는 안되지만, 뭔가 많이 (많이) 간다면 명심하십시오. –

관련 문제