如何将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
相关产品推荐
相关产品推荐

