我在试着把我的微笑代码转换成指纹。它确实有效,但是我在使用SmilesCodeLis的函数时遇到了问题

2024-05-17 13:23:14 发布

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

我试图在一列上迭代我的函数,但它不能正常工作。你们能告诉我在哪里需要修改代码吗?你知道吗

那是我的密码

def SmilesToFPS(smiles):
    mol = Chem.MolFromSmiles(smiles)
    fps = FingerprintMols.FingerprintMol(mol)
    #fpSize=1024, minPath=1, maxPath=7,
     #    bitsPerHash=2, useHs=True, 
      #    tgtDensity=0.0, minSize=0, 
       #    branchedPaths=True, useBondOrder=True, 
        #      atomInvariants=0, fromAtoms=0, atomBits=None, bitInfo=None)
    return print(fps.ToBitString()) 

for index, row in df_3.iterrows():

#for i, number in df_3['SmilesCode'].iteritems(): 
#this doesn't work.thats why I used .iterrows
    try:
        fingerprints = SmilesToFPS(smiles)

    except:
        fingerprints = 'ERROR'
    print('\r', row['SmilesCode'], fingerprints, end='')

    smiles_list.append(row['SmilesCode'])
    fingerprint_list.append(fingerprints)

df_4 = pd.DataFrame({'SmilesCode' : smiles_list, 'Fingerprints' : fingerprint_list})

我希望每个SmilesCode都有一个位字符串,但我只得到每行/SmilesCode的错误。 所定义的函数确实有效,但如果我使用它来迭代所需的列,就行不通了! 如果我使用pandas中的apply()函数:

df_modDfObj = df_3.apply(SmilesToFPS)

我得到这个错误代码:

ArgumentError:中的Python参数类型 rdkit.Chem.rdmolops公司.RDKFingerprint(非类型,int,int,int,int,int,float,int) 与C++签名不匹配: RDKFingerprint(RDKit::ROMol mol,unsigned int minPath=1,unsigned int maxPath=7,unsigned int fpSize=2048,unsigned int nBitsPerHash=2,bool useHs=True,double tgtDensity=0.0,unsigned int minSize=128,bool branchedPaths=True,bool useBondOrder=True,boost::python::api::object atomInvariants=0,boost::python::api::object fromAtoms=0,boost::python::api::object atomBits=None,boost::python::api::object bitInfo=None)


Tags: 函数noneapitruedfobjectlistint