当每个行中未固定的列顺序时,将制表符分隔文件导入为pandas数据帧

时间:2017-12-29 07:41:23

标签: python pandas dataframe pysam

我正在尝试将制表符分隔的sam文件导入为pandas dataframe。

  

NB501670:42:HJL7WAFXX:1:11209:17120:18358 83 CHR1 13182 0 86M = 13178 -90 CAGCTGTAACTCAAAGCCTTAGCCTCTGTTCCCACGAAGGCAGGGCCATCGGGCACCAAAGGGATTCTGCCAGCATAGTGCTCCTG EEEAEEE6EEEAE // EEAEEEAAA / EEEEEAEAEEEEEAEEEEEEE // EEAAEAEEEEEEEEEAEEEEEE / EEEEEEEEEEAEEEE MC:Z:7S90M20S MD:Z:50A35 RG位:Z :样本NM:i:1 AS:i:81 XS:i:81 RX:Z:TCCAAGAA   NB501670:42:HJL7WAFXX:3:11411:9444:15777 83 chr1 19434 0 20M = 19335 -119 GGTGGAGGGGCTGCAGACTC AEAAE / EEEEE / AEEAEE / E MC:Z:20S39M MD:Z:20 RG:Z:样品NM:i:0 AS:i:20 XS:i:20 RX:Z:TACTCTTC   NB501670:42:HJL7WAFXX:1:11212:2247:4550 99 CHR1 22984 0 115M8S = 22984 115 TCTTCCCTAGGTGTCCCTCGGGCACATTTAGCACAAAGATAAGCACAAAAGGTGCATCCAGCACTTTGTTACTATTGGTGGCAGGTTTATGAATGGCAACCAAAGGCAGTGTACGTCCTCACT EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAEEEEEEEAEEAEEEAEEEAEEAEEEEAEEEEEEEEEEEAEEEEAEEEAAAEEE XA:Z:CHR9,+ 23097,115M8S,0; chr19,+ 64592,115M8S,0; CHR 15,-102508066, 8S115M,1; CHR2,-114347920,8S115M,3; chr12,-80579,8S115M,3; MC:Z:18S115M8S MD:Z:115 RG:Z:样品NM:i:0 AS:i:115 XS:i:115 RX:Z:TCTCATCT   NB501670:42:HJL7WAFXX:3:11508:18628:11422 99 CHR1 22984 0 115M8S = 22984 115 TCTTCCCTAGGTGTCCCTCGGGCACATTTAGCACAAAGATAAGCACAAAAGGTGCATCCAGCACTTTGTTACTATTGGTGGCAGGTTTATGAATGGCAACCAAAGGCAGTGTACGTCCTCACT EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAEEEEEEEEEEEEEEEEEE / EEEEEEAAEEEEEEEEEEEEEEAEEEEEEEEEEEEEEEEA / EAAAEAAA XA:Z:chr19,+ 64592,115M8S,0; CHR9,+ 23097,115M8S,0; CHR 15 ,-102508066,8S115M,1; CHR2,-114347920,8S115M,3; chr12,-80579,8S115M,3; MC:Z:18S115M8S MD:Z:115 RG:Z:样品NM:i:0 AS:i:115 XS:i:115 RX:Z:TCTCATCT   NB501670:42:HJL7WAFXX:2:21203:5598:10862 83 CHR1 25804 0 130M = 25783 -151 AGTGGGGCCCTTGGTTGCAACACAAGTAGGTGGGGATGGATGAGTGTGGCATGAAGGGCCTAGGAGATTTCACTTGGGTTTAAAATGCTGTGACCTTGAGTAAGTTGCCGTCTCTGAATCTGATCCTTTC EEEAAEEEEEEAEAEE      

输入文件中的每一行都以NB开头。

以下是我将文件作为数据框读取的代码。

InSamFile = r'truq_chr1_10M.R1.sorted.txt'

max_n=22

df = pd.read_csv(InSamFile, sep='\t',comment='#', dtype=str, names=range(max_n))

df.head()

以上代码导入如下文件 Head of the dataframe

在数据框中,最初的11列可用于所有行,因此可以正确导入它们。但是,现在有些列,例如MC:Z:xxxxx标签出现在MD:Z:xxxx标签之前的某一行。最后,如果MC标签在那里,它将混合在MD标签列中,依此类推。

它在特定列中输入错误的值。

你能否在检查列表的开头时建议如何read_csv,例如:如果从MD开始然后把所有值sin MD列,从RG,NM等开始并且没有找到具有特定标签的值而不是放置NA或保持空? 可以跳过前12列进行此类检查,因为它们始终以正确的顺序存在于所有行中。这样,对于大多数原始列,具有MC标记的列将为空。

在处理数据框时读取文件或稍后的任何建议都将受到赞赏。我可以通过逐个读取所有列来使用awk执行此操作,并匹配列的开头(如果MD / MC / etc并且相应地分配)。但我是python的新手并寻求帮助。

阿米特

0 个答案:

没有答案