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

如何将pdb文件转换为可供pandas处理的csv文件

PDB转适用于pandas处理的CSV实现方案

两种经过验证的可直接运行的方案,按需选择即可。

方案1:Biopython解析(推荐,适配所有标准PDB)

这个方案兼容性最好,不会出现列错位、字段解析错误的问题,适合学位论文这类对数据准确性要求高的场景。

  • 先安装依赖:
    pip install biopython pandas
  • 运行以下代码,替换代码里的输入PDB路径即可:
    from Bio.PDB import PDBParser
    import pandas as pd
    
    # 初始化解析器,屏蔽非关键格式警告
    parser = PDBParser(QUIET=True)
    # 替换为你的本地PDB文件路径
    structure = parser.get_structure("target_structure", "your_input_file.pdb")
    
    atom_data = []
    # 遍历结构层级提取需要的字段,可按需增减字段
    for model in structure:
        for chain in model:
            for res in chain:
                for atom in res:
                    atom_data.append({
                        "chain": chain.id,
                        "residue_name": res.get_resname(),
                        "residue_number": res.get_id()[1],
                        "atom_name": atom.get_name(),
                        "element": atom.element,
                        "x": atom.coord[0],
                        "y": atom.coord[1],
                        "z": atom.coord[2],
                        "occupancy": atom.get_occupancy(),
                        "b_factor": atom.get_bfactor()
                    })
    
    # 直接生成pandas可处理的DataFrame,同时导出为CSV
    df = pd.DataFrame(atom_data)
    df.to_csv("pdb_converted.csv", index=False)
    

提取的字段包含链ID、残基信息、原子三维坐标、占有率、温度因子等结构研究常用字段,可根据自己的分析需求增删字典里的键值对。

方案2:无额外依赖轻量方案(仅适配严格符合格式规范的PDB)

如果不想安装Biopython,且你手里的PDB是从官方结构库下载的标准格式文件,可以直接用pandas的固定宽度读取功能解析:

import pandas as pd

# PDB ATOM/HETATM行的固定列宽与对应字段名,遵循PDB v3.3格式标准
col_specs = [
    (0,6), (6,11), (12,16), (16,17), (17,20), (21,22), (22,26), (26,27),
    (30,38), (38,46), (46,54), (54,60), (60,66), (76,78)
]
col_names = [
    "record_type", "atom_serial", "atom_name", "alt_loc", "residue_name",
    "chain_id", "residue_number", "icode", "x", "y", "z", "occupancy",
    "b_factor", "element"
]

df = pd.read_fwf(
    "your_input_file.pdb",
    colspecs=col_specs,
    names=col_names
)
# 过滤掉文件头、注释等非原子记录行
df = df[df["record_type"].isin(["ATOM  ", "HETATM"])]
df.to_csv("pdb_converted.csv", index=False)

注意:该方案对格式容错性差,不要用于解析分子动力学模拟输出的自定义PDB、手动修改过列对齐的PDB文件,否则会出现坐标错位、字段匹配错误的问题。

常见避坑提示

  • 不要直接用pd.read_csv加空格分隔符读取PDB:PDB是固定列宽格式,原子名、残基名内允许存在空格,用分隔符读取必然出现列错位
  • 导出CSV时务必加index=False参数,避免写入无意义的pandas默认行索引
  • 若需要提取PDB文件头的实验分辨率、配体信息、二硫键连接等特殊内容,必须使用专门的结构解析库,不要自行编写正则表达式匹配,容易遗漏格式边界情况

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 04:18:35