Я пытаюсь перебрать свою функцию по столбцу, но она не работает должным образом.Не могли бы вы, ребята, показать мне, где я должен исправить свой код?
Это мой код
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.Определенная функция работает, но не в том случае, если я использую ее для перебора нужного столбца!Если я использую функцию apply () из pandas:
df_modDfObj = df_3.apply(SmilesToFPS)
, я получаю этот код ошибки:
ArgumentError: Типы аргументов Python в rdkit.Chem.rdmolops.RDKFingerprint (NoneType, 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 :: objectfromAtoms = 0, boost :: python :: api :: object atomBits = Нет, boost :: python :: api :: object bitInfo = None)