我试图在一列上迭代我的函数,但它不能正常工作。你们能告诉我在哪里需要修改代码吗?你知道吗
那是我的密码
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)
目前没有回答
相关问题 更多 >
编程相关推荐