我正在尝试搜索大型化学数据库(chembl,> 1,000,000 个条目),并且在我的工作计算机上执行代码时遇到问题。我们的重点是化学品,因此没有高质量的计算机。
我的代码在下面,可以快速处理较小的条目(> 5,000 个条目)。查看完整数据集时,我的 4GB 内存已满,计算机停止运行。有什么方法可以更有效地完成这项任务?
import pandas as pd
from rdkit.Chem import PandasTools
from rdkit.Chem import Descriptors
filename1 = "chembl_22_chemreps_1"
fg = pd.read_csv('data/%s.txt' %filename1, sep='\t')
#fg=fg.head(5000)
fg.drop(fg.columns[[2, 3]], axis=1,inplace=True)
PandasTools.AddMoleculeColumnToFrame(fg, smilesCol='canonical_smiles')
fg['MW']=fg['ROMol'].map(Descriptors.MolWt)
fg['Aromatic']=fg['ROMol'].map(Descriptors.NumAromaticRings)
fg['Aliphatic']=fg['ROMol'].map(Descriptors.NumAliphaticRings)
fg = fg[(fg['Aromatic'] ==0) &
(fg['Aliphatic'] ==0) &
(fg['MW'] < 1000) &
(fg['MW'] > 50)]
代码加载数据库,将微笑转换为 RDkit 分子信息,搜索并删除 MW 低于 50、高于 1000 的环或分子。
有小费吗?