将内容重新组织为python3中的文本文件

问题描述 投票:0回答:1

我有一个制表符分隔的文件,例如这个小示例:

小例子:

PB.5680.1   GS_Isoseq_HQ_transcript/9773
PB.5681.1   GS_Isoseq_HQ_transcript/9825,GS_Isoseq_HQ_transcript/9097,GS_Isoseq_HQ_transcript/9835,GS_Isoseq_HQ_transcript/9415,GS_Isoseq_HQ_transcript/9259,GS_Isoseq_HQ_transcript/9539
PB.5686.1   GS_Isoseq_HQ_transcript/9151,GS_Isoseq_HQ_transcript/9450

我正在尝试解析文件并制作一个新文件,如下所示的预期输出。实际上,每个笔录/编号都应位于单独的行中,但是如果它们来自输入文件中的同一行,则它们的第一列将类似:

预期输出:

PB.5680.1   transcript/9773
PB.5681.1   transcript/9825
PB.5681.1   transcript/9097
PB.5681.1   transcript/9835
PB.5681.1   transcript/9415
PB.5681.1   transcript/9259
PB.5681.1   transcript/9539
PB.5686.1   transcript/9151
PB.5686.1   transcript/9450

为此,我在python3中编写了以下代码。

import pandas as pd
df =  pd.read_csv('myfile.txt',  sep='\t,_', engine='python')
column = []
for line in df:
    dat = column.append(line)
    dat.to_csv("outfile.txt", sep = "\t")

但是它不返回我想要得到的。你知道如何解决吗?

pandas file
1个回答
0
投票

为了方便起见,我们将为PB.5680.1的列提供名称ID,而另一列将被称为TRANSCRIPT。

我还将假设TRANSCRIPT列中的值都是字符串。因此,我们需要首先使每一行成为列表,然后展开列表,最后将其导出。

#Making TRANSCRIPT values lists
df['TRANSCRIPT']= df['TRANSCRIPT'].apply(lambda x: x.split(','))

#Set index to ID and explode TRANSCRIPT
df2 = df.set_index('ID')['TRANSCRIPT'].explode()

#export to CSV
df2.to_csv('./allDone.csv', header = False)

© www.soinside.com 2019 - 2024. All rights reserved.