You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何利用DataFrame替换FASTA文件中的序列名称

解决FASTA序列ID批量替换问题

没问题,我来帮你搞定这个FASTA序列ID替换的需求!针对你的场景,我准备了两种实用的Python解决方案,都能精准替换匹配DataFrame的序列ID,同时保留其他内容不变。

方案一:用Biopython(专业生物信息学库)

这个方案适合经常处理生物信息学文件的场景,Biopython能帮你稳妥处理FASTA的格式细节,避免手动处理文本可能出现的格式问题。

步骤:

  1. 先安装所需依赖:
pip install biopython pandas
  1. 运行以下脚本:
from Bio import SeqIO
import pandas as pd

# 初始化你的DataFrame(如果是从CSV/Excel读取,替换成pd.read_csv()即可)
data = [["seqB", "BOBO"], ["seqC", "JOHN"]]
df = pd.DataFrame(data, columns=["seq name", "New name seq"])

# 把DataFrame转成快速查找的字典,提升匹配效率
name_mapping = df.set_index("seq name")["New name seq"].to_dict()

# 定义输入输出文件路径
input_fasta = "input.fasta"  # 你的原始FASTA文件路径
output_fasta = "output.fasta"  # 替换后的输出文件路径

# 处理并写入新FASTA
with open(output_fasta, "w") as out_handle:
    for record in SeqIO.parse(input_fasta, "fasta"):
        # 检查当前序列ID是否在映射表里
        if record.id in name_mapping:
            # 保留原描述行的其他内容,只替换ID部分
            original_desc = record.description.split(" ", 1)[1] if " " in record.description else ""
            record.id = name_mapping[record.id]
            record.description = f"{record.id} {original_desc}".strip()
        # 写入处理后的序列
        SeqIO.write(record, out_handle, "fasta")

方案二:纯Python文本处理(无需额外库)

如果不想安装Biopython,这个轻量方案也能完美解决问题,直接操作文本内容:

import pandas as pd

# 构建ID映射字典
data = [["seqB", "BOBO"], ["seqC", "JOHN"]]
df = pd.DataFrame(data, columns=["seq name", "New name seq"])
name_mapping = df.set_index("seq name")["New name seq"].to_dict()

input_file = "input.fasta"
output_file = "output.fasta"

# 逐行处理FASTA文件
with open(input_file, "r") as infile, open(output_file, "w") as outfile:
    for line in infile:
        line = line.strip()
        if line.startswith(">"):
            # 拆分ID和描述内容
            parts = line[1:].split(" ", 1)
            seq_id = parts[0]
            if seq_id in name_mapping:
                # 替换ID,保留原描述信息
                new_id = name_mapping[seq_id]
                new_line = f">{new_id} {parts[1]}\n" if len(parts) > 1 else f">{new_id}\n"
                outfile.write(new_line)
            else:
                outfile.write(line + "\n")
        else:
            # 序列行直接原样写入
            outfile.write(line + "\n")

注意事项:

  • 确保你的FASTA文件格式规范,每个序列的ID是唯一的
  • 如果你的DataFrame是从外部文件(比如CSV)读取的,把脚本里的data部分替换成df = pd.read_csv("你的文件路径.csv")即可

内容的提问来源于stack exchange,提问作者Grendel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 11:00:14