python - 根据python中的数据框重命名fasta文件

标签 python pandas biopython

你好,我有一个很大的文件,例如:

>Seq1.1
AAAGGAGAATAGA
>Seq2.2
AGGAGCTTCTCAC
>Seq3.1
CGTACTACGAGA
>Seq5.2
CGAGATATA
>Seq3.1
CGTACTACGAGA
>Seq2
AGGAGAT

和一个数据框,例如:

标签

query  New_query
Seq1.1 Seq1.1
Seq2.2 Seq2.2
Seq3.1 Seq3.1_0
Seq5.2 Seq5.2_3
Seq3.1 Seq3.1_1

想法是根据标签重命名>Seqname

然后对于每个 Seqname,如果 tab['query'] != tab['New_query'],则将 Seqname 重命名为tab['New_query']

Ps: 所有的 >Seqname 都没有出现在选项卡中,如果是这样我什么都不做。

然后我应该得到一个新的 fasta 文件,例如:

 >Seq1.1
    AAAGGAGAATAGA
    >Seq2.2
    AGGAGCTTCTCAC
    >Seq3.1_0
    CGTACTACGAGA
    >Seq5.2_3
    CGAGATATA
    >Seq3.1_1
    CGTACTACGAGA
    >Seq2
    AGGAGAT

我试过这段代码:

records = SeqIO.parse("My_fasta_file.aa", 'fasta')
for record in records:
    subtab=tab[tab['query']==record.id]
    subtab=subtab.drop_duplicates(subset ="New_query",keep = "first") 
    if subtab.empty == True: #it means that the seq was not in the tab, so I do not rename the sequence. 
        continue
    else:
        if subtab['query'].iloc[0] != subtab['New_query'].iloc[0]:
            record.id = subtab['New_query']
            record.description = subtab['New_query']
        else:
            continue

它有效,但需要很多时间......

最佳答案

您可以从数据帧创建映射器字典,然后逐行读取 fasta 文件,替换以 > 开头的行:

mapper = tab.set_index('query').to_dict()['New_query']

with open('My_fasta_file.aa', 'r') as f_in, open('output.txt', 'w') as f_out:
    for line in map(str.strip, f_in):
        if line.startswith('>'):
            v = line.split('>')[-1]
            line = '>{}'.format(mapper.get(v, v))
        print(line, file=f_out)

创建output.txt:

>Seq1.1
AAAGGAGAATAGA
>Seq2.2
AGGAGCTTCTCAC
>Seq3.1_1
CGTACTACGAGA
>Seq5.2_3
CGAGATATA
>Seq3.1_1
CGTACTACGAGA
>Seq2
AGGAGAT

关于python - 根据python中的数据框重命名fasta文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64625728/

相关文章:

python - 从其他 numpy 数组创建 numpy 数组

python - 在 Python 中,我们应该在参数列表中设置 Optional[str] = None 吗?

python - 如何在连接后重新索引 pandas DataFrame

python - Biopython密码表错误?

python - 如何在没有内置方法的情况下在Python中查找关键字之前和之后的单词

python - 在执行许多 I/O 绑定(bind)操作时如何在 Python 中最大化性能?

python - 使用 block 大小将 CSV 文件从 s3 加载到 Pandas

python - Pandas - 数据框与一系列值的合并

python - 使用 Biopython 解析 PDB 文件

python从多序列比对中删除特殊列