1

列に対して関数を反復しようとしていますが、正しく機能しません。コードを修正する必要がある場所を教えてもらえますか?

それは私のコードです

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 に Bitstring が必要ですが、すべての行/SmilesCode でエラーしか取得できません。定義された関数は機能しますが、それを使用して目的の列を反復処理する場合は機能しません! パンダの apply() 関数を使用する場合:

df_modDfObj = df_3.apply(SmilesToFPS)

次のエラー コードが表示されます。

ArgumentError: rdkit.Chem.rdmolops.RDKFingerprint(NoneType, int, int, int, int, int, float, int) の Python 引数の型が 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)

4

0 に答える 0