2016-06-18 16 views
1

I持って次のようにフォーマットされたテーブルヘッダに続く長いセクションをコメントしているいくつかの大規模なタブ区切りのデータセット、:##で始まる パンダ: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 

すべてが取り除かれる必要があるコメントですが、

I #CHROMで始まるヘッダーを保持する必要があります。これを行う方法はありますか?私がPandas read_tableのために見ている唯一のオプションは、コメント文字列のためのただ一つの文字を許し、私は正規表現のためのオプションを見ません。明確にするために、ヘッダ領域が ##で始まる:これは私が

はEDIT維持したいヘッダを含む、#で始まるすべての行を削除し

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

関連する問題