有什么方法可以一种热编码方式转换smiles .csv文件吗?

时间:2020-04-01 07:32:03

标签: python-3.x machine-learning deep-learning

我已使用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

我正在共享我的代码文件,同时您可以看到该演示

Experimental code

Demo dataset

如果有人可以帮助我,请告诉我。

2 个答案:

答案 0 :(得分:0)

Chem.MolToSmiles(Chem.MolFromSmiles( smiles ))只能将一个SMILES转换为另一个,但是您尝试了整个数据帧。 您必须在数据框中遍历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

.
.
.

答案 1 :(得分:-1)

这里真的没有足够的信息来提供完整的答案。输出看起来像一个Numpy数组,并且Numpy需要预分配浮点数的长度。如果您有第一行是10个浮点数,则在添加第二行时它必须在10个以内且不能超过。无法为其分配内存。