我正在尝试将制表符分隔的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的新手并寻求帮助。
阿米特