今天下午做了一下午的拆分数据集,将具有相同母核的分子放在一个csv文件中,然后新的csv文件命名是母核的名字,然后拆分出的数据集和原始未拆分的数据集的数量总是对不上,我无语了,排查错误了很久,我快吐了,最后发现是出在了下面这一行代码上:
df_match.to_csv('drawimages/data/diffscaffold/{}.csv'.format(csv_name), index=False)
乍一看可能感觉没问题,确实也是可以存入数据,但是里面有一个坑,就是 如果现在两个母核是下面这两种的时候(这两个母核只有部分的原子大小写不一致,但是他们是不一样的),那么它只会存储其中一种(大坑)!【原因:Windows会把这两个虽然大小写不一致的文件夹认为是一种,且只能存在一种!】所以会一直导致不能存储所有的数据,总是对不上数据。。。。
O=C(NCc1ccccc1)c1c(Cc2ccccc2)sc2c1CCOC2
O=C(NCC1CCCCC1)c1c(Cc2ccccc2)sc2c1CCOC2
只需要修改代码为:
for i, core in enumerate(core_list):
matches = []
for j, smiles in enumerate(smiles_list):
mol = Chem.MolFromSmiles(smiles)
core_mol = Chem.MolFromSmiles(core)
if mol.HasSubstructMatch(core_mol):
matches.append(j)
# 选取包含母核的行,并保存到一个新的csv文件中
df_match = df.iloc[matches]
df_match.to_csv('drawimages/data/diffscaffold/{}.csv'.format(i+1), index=False)
print("{}.csv is done! ".format(i+1))