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

如何将拆分后的Pandas DataFrame转为BioPandas对象并保存为PDB文件?

问题

我有一个已处理的1asy_pocket.pdb文件,希望基于聚类算法生成的、存储在hlabs变量中的标签,将其进一步处理并拆分为4个不同的文件。我可以用BioPandas处理该文件,但在生成4个Pandas DataFrame后,无法将每个DataFrame保存为独立文件。

我的代码如下:

from biopandas.pdb import PandasPdb 
import pandas as pd
from distances import hlabs


pdb = PandasPdb().read_pdb('1asy_pocket.pdb')
print(pdb.df.keys())

atoms_df = pdb.df['ATOM']
hetatm_df = pdb.df['HETATM']

atoms = pd.concat([atoms_df, hetatm_df])
print(atoms)

series = pd.Series(hlabs, name="labels")
data = pd.concat([atoms, series], axis=1)
fragments = data.groupby(['labels'])

groups = []
names = []
for name, group in fragments:
    print(group.shape)
    group = pd.DataFrame(group)
    group = group.drop(['labels'], axis=1)
    groups.append(group)
    names.append(name)

numbers = range(0, len(groups))
numbers = list(map(str, numbers))
print(numbers)

for x, y in zip(groups, numbers):
    x.to_pdb(path='file'+y+'.pdb',
        records=['ATOM', 'HETATM'])

报错信息如下:

File "/hdda/mihai/first_model/pdb_test/april_test/pockets/./bpd.py", line 35, in <module>
    x.to_pdb(path='file'+y+'.pdb',
    ^^^^^^^^
  File "/hdda/mihai/miniconda/pytorch_env/lib/python3.13/site-packages/pandas/core/generic.py", line 6321, in __getattr__
    return object.__getattribute__(self, name)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^
AttributeError: 'DataFrame' object has no attribute 'to_pdb'. Did you mean: 'to_hdf'?

请问是否可以将这4个DataFrame转换为BioPandas对象?

解决方案

可以将拆分后的DataFrame转换为BioPandas的PandasPdb对象,核心是为每个分组数据创建新的PandasPdb实例,填充对应字段后再保存。

修改后的代码如下:

from biopandas.pdb import PandasPdb 
import pandas as pd
from distances import hlabs


pdb = PandasPdb().read_pdb('1asy_pocket.pdb')

atoms_df = pdb.df['ATOM']
hetatm_df = pdb.df['HETATM']

atoms = pd.concat([atoms_df, hetatm_df])

series = pd.Series(hlabs, name="labels")
data = pd.concat([atoms, series], axis=1)
fragments = data.groupby(['labels'])

for idx, (name, group) in enumerate(fragments):
    # 移除标签列
    group = group.drop(['labels'], axis=1)
    # 新建PandasPdb对象
    new_pdb = PandasPdb()
    # 拆分回ATOM和HETATM(还原之前的合并操作)
    new_pdb.df['ATOM'] = group[group['record_name'] == 'ATOM']
    new_pdb.df['HETATM'] = group[group['record_name'] == 'HETATM']
    # 保存为独立PDB文件
    new_pdb.to_pdb(path=f'file{idx}.pdb', records=['ATOM', 'HETATM'])

关键修改点:

  • 直接遍历groupby结果处理每个分组,无需额外收集分组列表
  • 为每个分组创建空的PandasPdb实例,符合BioPandas的操作要求
  • 将合并后的分组数据重新拆分回ATOM和HETATM,填充到新对象的对应字段中
  • 调用PandasPdb对象的to_pdb方法保存,避免DataFrame无此方法的报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.02 13:43:10