如何用RDKit导出Pandas DataFrame为.mol/.sdf及转换Smiles至Mold2?
批量将SMILES转换为Mold2格式(GUI工具操作)
- 准备输入文件:把所有需要转换的SMILES整理到纯文本文件(.txt)中,每行一个SMILES;如果需要关联分子ID,可在每行SMILES前添加ID,用制表符分隔
- 打开Mold2 GUI工具后,按以下步骤操作:
- 点击菜单栏「File」→「Load SMILES」,选择你准备好的文本文件
- 在参数配置界面,指定输出文件路径,并根据需求选择要生成的Mold2特征类别
- 点击「Start」启动批量转换,完成后会在指定路径生成包含Mold2特征的输出文件(常见格式为.csv或.txt)
使用RDKit将Pandas DataFrame导出为.mol或.sdf文件
前提条件
确保你的环境已安装RDKit和Pandas,且DataFrame中包含有效的SMILES列(示例中列名为SMILES)
导出为单个.mol文件(仅适用于单分子)
import pandas as pd from rdkit import Chem from rdkit.Chem import rdMolWriter # 读取目标DataFrame df = pd.read_csv("your_input_data.csv") # 将SMILES转换为RDKit Mol对象 mol = Chem.MolFromSmiles(df["SMILES"].iloc[0]) # 写入.mol文件 writer = rdMolWriter.MolWriter("single_molecule.mol") writer.write(mol) writer.close()
导出为.sdf文件(多分子批量导出)
import pandas as pd from rdkit import Chem from rdkit.Chem import SDWriter # 读取目标DataFrame df = pd.read_csv("your_input_data.csv") # 初始化SDWriter对象 writer = SDWriter("molecules_batch.sdf") # 遍历DataFrame处理每个分子 for _, row in df.iterrows(): mol = Chem.MolFromSmiles(row["SMILES"]) if mol: # 跳过无效SMILES对应的条目 # 可选:将DataFrame中的其他字段作为分子属性写入 if "ID" in df.columns: mol.SetProp("Molecule_ID", str(row["ID"])) writer.write(mol) # 关闭写入器 writer.close()
注意事项
- 转换前建议验证SMILES的有效性,避免因无效结构导致导出失败
- 若需要保留更多分子属性,可通过
mol.SetProp(key, value)方法将DataFrame中的列值添加到Mol对象中
内容的提问来源于stack exchange,提问作者Petr
相关产品推荐
相关产品推荐

