Вы получаете ошибку, потому что pd.Series предоставляет вам фрейм данных с 2048 строками (битовая длина отпечатков MHFP), но ваш фрейм данных имеет другое количество строк.
Вы можете пойти другим путем, чтобы добавитьОтпечатки пальцев к вашему фрейму данных.
Если у вас есть такой фрейм данных
import pandas as pd
smiles = ['CCC(C)(C)N', 'NCC(O)CO', 'NCCN1CCNCC1','NCCN']
input_table = pd.DataFrame(smiles, columns=['usmiles_c'])
print(input_table)
usmiles_c
0 CCC(C)(C)N
1 NCC(O)CO
2 NCCN1CCNCC1
3 NCCN
и вы сделали такие фингерпринты
from mhfp.encoder import MHFPEncoder
mhfp_encoder = MHFPEncoder()
fps = []
for smiles in input_table['usmiles_c']:
fp = mhfp_encoder.secfp_from_smiles(smiles)
fps.append(fp)
, вы можете добавить целые отпечатки пальцев в одинстолбец
input_table['new_col'] = fps
print(input_table)
usmiles_c new_col
0 CCC(C)(C)N [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ..., 0
1 NCC(O)CO [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ..., 0
2 NCCN1CCNCC1 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ..., 0
3 NCCN [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ..., 0
или создать отдельный столбец для каждого бита
col_name = range(len(fps[0]))
for n in col_name:
input_table[n] = [m[n] for m in fps]
print(input_table)
usmiles_c 0 1 2 3 4 5 ... 2041 2042 2043 2044 2045 2046 2047
0 CCC(C)(C)N 0 0 0 0 0 0 ... 0 0 0 0 0 0 0
1 NCC(O)CO 0 0 0 0 0 0 ... 0 0 0 0 0 0 0
2 NCCN1CCNCC1 0 0 0 0 0 0 ... 0 0 0 0 0 0 0
3 NCCN 0 0 0 0 0 0 ... 0 0 0 0 0 0 0