Есть ли способ конвертировать смайлы в файл .csv в одну горячую кодировку? - PullRequest
0 голосов
/ 01 апреля 2020

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

Успешный эксперимент:

 new = 'O=C(O)C1=C(N2N=CC=N2)C=CC(N)=N1'

   output :
   array([[0., 0., 0., ..., 0., 0., 0.],
   [0., 0., 0., ..., 0., 0., 0.],
   [0., 0., 0., ..., 0., 0., 0.],
   ...,
   [0., 0., 0., ..., 0., 0., 0.],
   [0., 0., 0., ..., 0., 0., 0.],
   [0., 0., 0., ..., 0., 0., 0.]])

, но пока пробуя несколько улыбок, я получаю эту ошибку

   TypeError: No registered converter was able to produce a C++ rvalue of type class 
   std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> > from 
    this Python object of type DataFrame

Я делюсь своим файлом кода, пока вы видите эту демонстрацию

Экспериментальный код

Набор демонстрационных данных

Если кто-нибудь может мне помочь, пожалуйста, дайте мне знать.

Ответы [ 2 ]

0 голосов
/ 02 апреля 2020

Chem.MolToSmiles(Chem.MolFromSmiles( smiles )) может конвертировать только один SMILES за другим, но вы пробовали весь фрейм данных. Вы должны l oop над SMILES в вашем фрейме данных.

Это должно работать.

df = pd.read_csv('RouteSynthesisPrediction_o2h.csv')

for smi in df['Target']:
    smiles = Chem.CanonSmiles(smi)
    mat = smiles_encoder(smiles)
    dec = smiles_decoder(mat)
    print(mat)
    print(smi)
    print(smiles)
    print(dec)
    print()

Вывод:

[[0. 0. 0. ... 0. 0. 0.]
 [0. 0. 0. ... 0. 0. 0.]
 [0. 0. 0. ... 0. 0. 0.]
 ...
 [0. 0. 0. ... 0. 0. 0.]
 [0. 0. 0. ... 0. 0. 0.]
 [0. 0. 0. ... 0. 0. 0.]]
O=C(O)C1=C(N2N=CC=N2)C=CC(N)=N1
Nc1ccc(-n2nccn2)c(C(=O)O)n1
Nc1ccc(-n2nccn2)c(C(=O)O)n1

[[0. 0. 0. ... 0. 0. 0.]
 [0. 0. 0. ... 0. 0. 0.]
 [0. 0. 0. ... 0. 0. 0.]
 ...
 [0. 0. 0. ... 0. 0. 0.]
 [0. 0. 0. ... 0. 0. 0.]
 [0. 0. 0. ... 0. 0. 0.]]
O=C(OC)C1=C(N2N=CC=N2)C=CC(N)=N1
COC(=O)c1nc(N)ccc1-n1nccn1
COC(=O)c1nc(N)ccc1-n1nccn1

.
.
.
0 голосов
/ 01 апреля 2020

Здесь действительно недостаточно информации, чтобы сделать полный ответ. Выходные данные выглядят как массив Numpy, а Numpy необходимо предварительно выделить длину с плавающей точкой. Если у вас первая строка на 10 поплавков, то при добавлении второй строки она должна соответствовать 10, а не go больше. Он не может выделить для него память.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...