2016-06-18 43 views
1

我有一些長期註釋的部分一些大型的製表符分隔的數據集,其次是表格標題,格式如下:熊貓:read_table用'##'刪除註釋行但不是'#<string>'?

##開始
##FORMAT=<ID=AMQ,Number=.,Type=Integer,Description="Average mapping quality for each allele present in the genotype"> 
##FORMAT=<ID=SS,Number=1,Type=Integer,Description="Variant status relative to non-adjacent Normal, 0=wildtype,1=germline,2=somatic,3=LOH,4=unknown"> 
##FORMAT=<ID=SSC,Number=1,Type=Integer,Description="Somatic Score"> 
#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT NORMAL TUMOR 
chr1 2985885 . c G . . . GT:IGT:DP:DP4:BCOUNT:GQ:JGQ:VAQ:BQ:MQ:AMQ:SS:SSC 0/0:0/0:202:36,166,0,0:0,202,0,0:255:225:0:36:60:60:0:. 0/1:0/1:321:29,108,37,147:0,137,184,0:228:225:228:36,36:60:60,60:2:225 
chr1 3312963 . C T . . . GT:IGT:DP:DP4:BCOUNT:GQ:JGQ:VAQ:BQ:MQ:AMQ:SS:SSC 0/1:0/1:80:36,1,43,0:0,37,0,43:80:195:80:36,31:60:60,60:1:. 0/0:0/0:143:138,5,0,0:0,143,0,0:255:195:255:36:60:60:3:57 

一切都需要被剝離出來的一個評論,但我需要保留以#CHROM開頭的標題。有沒有辦法做到這一點?我看到的大熊貓read_table的唯一選項只允許單個字符作爲註釋字符串,而我沒有看到正則表達式的選項。

我使用的代碼是這樣的:

SS_txt_df = pd.read_table(SS_txt_file,sep='\t',comment='#') 

這消除了與#開始所有線路,包括我想保持

編輯頁眉:爲了澄清,標題區開始##是可變長度的。在bash中,這只是grep -Ev '^##'

+0

查找csv.reader示例,readline,以「##」開頭的跳過行,構建列表然後轉換爲數據框。 – Merlin

回答

1

,你可以很容易地計算出的標題行數,必須讀您的CSV文件時被忽略:

fn = '/path/to/file.csv' 

skip_rows = 0 
with open(fn, 'r') as f: 
    for line in f: 
     if line.startswith('##'): 
      skip_rows += 1 
     else: 
      break 

df = pd.read_table(fn, sep='\t', skiprows=skip_rows) 

第一部分將只讀標題行 - 所以它應該是非常快的

1

使用skiprows作爲一種解決方法:

SS_txt_df = pd.read_table(SS_txt_file,sep='\t',skiprows=3) 
df 
Out[13]: 
    #CHROM POS ID REF ALT QUAL FILTER INFO FORMAT NORMAL TUMOR 
0 chr1 2985885 . c G . . . GT:IGT...     
1 chr1 3312963 . C T . . . GT:IGT...   

然後重命名你的第一列刪除#。
更新:
正如你說你##變化會如此,我知道這是不是一個可行的解決方案,但你可以放下所有的行開始#,然後通過列標題list爲您列不改變:

name=['CHROM','POS','ID','REF','ALT','QUAL','FILTER','INFO' ,'FORMAT','NORMAL','TUMOR'] 

df=pd.read_table(SS_txt_file,sep='\t',comment='#',names=name) 
df 
Out[34]: 
    CHROM POS ID REF ALT QUAL FILTER INFO FORMAT NORMAL TUMOR 
    0 chr1 2985885 . c G . . . GT:IGT...     
    1 chr1 3312963 . C T . . . GT:IGT...  
+0

對不起,我只發佈了一個數據集的片段;我以「##」開頭的標題要長得多,而且長度可變。 – user5359531

+0

列數是否變化? – shivsn

+0

在這種情況下,沒有。只有行數。 – user5359531