运行时发生Python参数错误化学除盐剂(). (Python参数类型与C++签名不匹配)

2024-05-17 14:50:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用RDKit处理一些任务,但遇到了一些问题。 我正试图用SaltRemover()函数清理我的数据集,但是ArgumentError发生了,我无法理解它。你知道吗

使用的代码如下:

from rdkit import Chem
from rdkit.Chem import AllChem
from rdkit.Chem.PandasTools import LoadSDF

A1 = LoadSDF('finaldata_A1.sdf', smilesName='SMILES')
A1 = A1['SMILES']

for mol in A1:
A1_mol = Chem.MolFromSmiles(mol)
if mol is None: continue

from rdkit.Chem import SaltRemover
remover = SaltRemover.SaltRemover(defnFormat='smiles')
A1_mol_SR = remover.StripMol(A1_mol)

运行代码后的错误消息是:

ArgumentError: Python argument types in rdkit.Chem.rdmolops.DeleteSubstructs(Mol, NoneType, bool) did not match C++ signature: DeleteSubstructs(class RDKit::ROMol mol, class RDKit::ROMol query, bool onlyFrags=False, bool useChirality=False)


Tags: 代码infromimporta1boolsmilesrdkit
1条回答
网友
1楼 · 发布于 2024-05-17 14:50:05

我想有几件事你很困惑。你知道吗

至于SaltRemover,您试图用defnFormat参数实现什么?使用此参数时,还应提供defnData,定义要删除的盐,即

from rdkit import Chem
from rdkit.Chem import SaltRemover

remover = SaltRemover(defnFormat='smarts', defnData="[Cl]")
mol = Chem.MolFromSmiles('CN(C)C.Cl')
res = remover.StripMol(mol)

# We have stripped the Cl
res.GetNumAtoms()
[Out]: 4

如果初始化SaltRemover,如果没有这些参数,salt定义将从file读取,后者将作为一组SMARTS查询读取。当您将defnFormat设置为'smiles'时,您告诉移除程序将文件作为一系列smiles字符串读取。当然,由于注释和格式错误,此文件不能作为字符串读取。在定义的salts中,随后会有“None”对象,这就是您接收ArgumentError的原因。rdkit在内部使用函数DeleteSubstructs,该函数被传递给您的查询分子和要删除的salt,现在可能是'None'。你知道吗

你可能不需要定义你自己的盐。如果不使用默认参数:

remover = SaltRemover()

# We can have a look at some of the salts
Chem.MolToSmarts(remover.salts[0])

[Out]: '[Cl,Br,I]'

# Use to strip salts
mol = Chem.MolFromSmiles('CN(C)C.Cl')
res = remover.StripMol(mol)
print(Chem.MolToSmiles(res))

[Out]: 'CN(C)C'

您的另一个问题似乎是如何处理数据。你好像在计算Mol对象两次?当您使用'LoadSDF'函数时,mol被添加到名为'ROMol'的列中,除非在molColName参数中指定。你也只想剥离一个分子?您可能应该考虑尝试将移除程序应用于A1数据框中的分子列。你知道吗

相关问题 更多 >