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

如何将FASTA文件正确转换为pandas DataFrame?

问题原因

Biopython解析FASTA得到的seqFP.seq是专属Seq类型,属于可迭代对象,直接传入pandas构造Series/DataFrame时,pandas会自动遍历可迭代对象,把每个氨基酸/碱基拆成单独元素,就会出现单字符拆分的异常显示。另外原代码中正则匹配返回的是match对象,不是实际匹配到的注释文本,直接存储无法得到正确的注释内容。

修正后可直接运行的代码
import pandas as pd
import re
from Bio import SeqIO

data = []
# 替换为你的FASTA文件实际路径
fasta_path = '/Users/xxx.fasta'

with open(fasta_path, 'r', encoding='utf-8') as f:
    for record in SeqIO.parse(f, "fasta"):
        # Seq对象转原生字符串,从根源避免pandas按字符拆分
        seq = str(record.seq)
        # 提取[]包裹的注释,兼容无匹配的异常情况
        annotate_res = re.search(r"\[([^]]*)\]", record.description)
        annotate = annotate_res.group(1) if annotate_res else ""
        data.append({
            "seq_id": record.id,
            "taxon_annotate": annotate,
            "full_sequence": seq
        })

# 构造DataFrame
df = pd.DataFrame(data)
# 预览前5行确认格式正确
print(df.head())
# 导出为xls文件,index=False去掉导出行号
df.to_excel('/Users/xxx_fasta_convert_result.xls', index=False)
补充说明
  • 若导出Excel时报依赖缺失:生成.xlsx格式文件执行pip install openpyxl安装依赖;生成老版.xls格式执行pip install xlwt安装依赖即可。
  • 如果FASTA头里有多个[]包裹的注释字段,可以把re.search换成re.findall,按需求拆分多列存储,更方便后续按不同分类维度给系统发育树着色。
  • 导出的表格默认包含序列ID、提取的物种/分类注释、完整序列三列,可直接对接常用的系统发育树注释工具使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 23:42:25