Я пытаюсь конвертировать мой SmilesCode в отпечатки пальцев. Это работает, но у меня проблемы с использованием функции для моего SmilesCode-List - PullRequest
1 голос
/ 04 июля 2019

Я пытаюсь перебрать свою функцию по столбцу, но она не работает должным образом.Не могли бы вы, ребята, показать мне, где я должен исправить свой код?

Это мой код

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)

...