Convertir el DataFrame a una tabla HTML.


Este script parte de un fichero de texto separado por tabuladores que contiene en la primera fila el nombre de cada columna y en cada columna una variable. Genera un fichero html que permite visualizar la tabla, ordenar de mayor a nemor, buscar y mostrar un número variable de registros.

import pandas as pd
import os

# --- Configuración de Archivos ---
input_file = r'D:\zzz\clusters_70_80_90.txt'
output_folder = r'D:\zzz'
output_html_file = 'cluster_data_sortable_table.html' # Nombre del archivo HTML de salida

# Asegúrate de que la carpeta de salida exista
os.makedirs(output_folder, exist_ok=True)

# --- Leer el Fichero de Datos ---
try:
    df = pd.read_csv(input_file, sep='\t')
    print(f"Archivo '{input_file}' leído exitosamente.")
except FileNotFoundError:
    print(f"Error: El archivo '{input_file}' no se encontró. Por favor, verifica la ruta.")
    exit()
except Exception as e:
    print(f"Ocurrió un error al leer el archivo: {e}")
    exit()

# --- Generar el Contenido HTML ---
# Convertir el DataFrame a una tabla HTML
# DataTables.net requiere que la tabla tenga un  y un 
# y un ID para poder inicializarla con JavaScript.
# df.to_html() lo hace de forma predeterminada si no especificas index=True

html_table = df.to_html(
    index=False, # No incluir el índice de Pandas en la tabla HTML
    table_id='myDataTable', # Asigna un ID a la tabla para JavaScript
    classes='display compact' # Clases CSS de DataTables para un estilo básico
)

# Plantilla HTML para envolver la tabla y añadir los scripts de DataTables
html_content = f"""



    Datos de Clústeres Ordenables
    
    
    
    


    

Datos de Clústeres

{html_table} """ # --- Guardar el archivo HTML --- output_path = os.path.join(output_folder, output_html_file) try: with open(output_path, 'w', encoding='utf-8') as f: f.write(html_content) print(f"Archivo HTML generado exitosamente en: {output_path}") print(f"Ábrelo con tu navegador web para ver la tabla interactiva.") except Exception as e: print(f"Error al escribir el archivo HTML: {e}")

El fiechero de partida es clusters_70_80_90.txt y la tabla generada en el fichero html de salida se puede ver justo debajo.

Name SMILES Cluster_70 Cluster_80 Cluster_90
MolPort-044-984-592_3 OC(=O)[C@@H]1OCC[C@H]1NC(=O)[C@@H]1OCC[C@@H]1CNC(=O)OCC1c2c(cccc2)c2c1cccc2 22 22 22
MolPort-044-985-007_10 OC(=O)[C@H]1OCC[C@@H]1CNC(=O)[C@@H]1COC[C@H]1NC(=O)OCC1c2c(cccc2)c2c1cccc2 20 20 20
MolPort-044-566-107_1 O=C(NCCN1C[C@@H]2C[C@H](C1)c1cccc(=O)n1C2)c1n[nH]c(c1)c1cc2c(OCC2)cc1 14 14 14
MolPort-044-984-907_12 OC(=O)[C@H]1OCC[C@H]1CNC(=O)[C@@H]1OCC[C@H]1NC(=O)OCC1c2c(cccc2)c2c1cccc2 0 0 23
MolPort-044-942-261_6 OC(=O)[C@H]1CN(CCO1)C(=O)[C@@H]1C[C@@H](NC(=O)OCC2c3c(cccc3)c3c2cccc3)C=C1 18 18 18
MolPort-044-975-789_3 OC(=O)Cn1cc(NC(=O)[C@@H]2OCC[C@H]2NC(=O)OCC2c3c(cccc3)c3c2cccc3)cn1 13 13 13
MolPort-044-991-489_12 OC(=O)[C@H]1C[C@H]1CNC(=O)[C@@H]1OCC[C@H]1NC(=O)OCC1c2c(cccc2)c2c1cccc2 0 0 12
MolPort-044-992-964_2 OC(=O)[C@H]1CN(CC21CC2)C(=O)C#CCNC(=O)OCC1c2c(cccc2)c2c1cccc2 5 5 2
MolPort-044-563-997_2 COc1c(cccc1)c1n[nH]c(c1)C(=O)NCCN1C[C@H]2C[C@H](C1)c1cccc(=O)n1C2 17 17 17
MolPort-044-985-584_2 C[C@H]1CN(C[C@@H]1C(=O)O)C(=O)C#CCNC(=O)OCC1c2c(cccc2)c2c1cccc2 21 21 21
MolPort-044-992-964_1 OC(=O)[C@@H]1CN(CC21CC2)C(=O)C#CCNC(=O)OCC1c2c(cccc2)c2c1cccc2 5 5 2
MolPort-044-544-232_2 COc1nn2c(CCCC(=O)N3CCCC4=C[C@@H]5C[C@@H](CN6CCCC[C@H]56)[C@H]34)nnc2cc1 16 16 16
MolPort-044-910-463_1 OC(=O)[C@]12CN(C[C@@H]1COCC2)C(=O)C#CCNC(=O)OCC1c2c(cccc2)c2c1cccc2 15 15 15
MolPort-044-543-441_14 O=C(CCCn1nnc2ccccc2c1=O)N1CCCC2=C[C@H]3C[C@H](CN4CCCC[C@@H]34)[C@@H]12 8 8 8
MolPort-044-985-309_2 OC(=O)[C@H]1[C@H]2C[C@@H]1N(C2)C(=O)C#CCNC(=O)OCC1c2c(cccc2)c2c1cccc2 19 19 19
MolPort-044-810-474_6 CC1(C)CC(=O)c2c(O)cc(OCC(=O)N3C[C@H]4C[C@H](C3)[C@H]3CCCC(=O)N3C4)cc2O1 4 4 4
MolPort-044-810-474_2 CC1(C)CC(=O)c2c(O)cc(OCC(=O)N3C[C@H]4C[C@H](C3)[C@@H]3CCCC(=O)N3C4)cc2O1 4 4 4
MolPort-044-611-890_6 C[C@@H](NC(=O)NC[C@@H]1C[C@@H](CO1)c1ccccc1)c1nnnn1c1ccccc1 1 1 1
MolPort-044-611-890_1 C[C@H](NC(=O)NC[C@@H]1C[C@H](CO1)c1ccccc1)c1nnnn1c1ccccc1 1 1 1
MolPort-044-611-890_3 C[C@H](NC(=O)NC[C@H]1C[C@H](CO1)c1ccccc1)c1nnnn1c1ccccc1 1 1 1
MolPort-044-611-890_7 C[C@H](NC(=O)NC[C@H]1C[C@@H](CO1)c1ccccc1)c1nnnn1c1ccccc1 1 1 1
MolPort-044-611-890_2 C[C@@H](NC(=O)NC[C@@H]1C[C@H](CO1)c1ccccc1)c1nnnn1c1ccccc1 1 1 1
MolPort-044-611-890_8 C[C@@H](NC(=O)NC[C@H]1C[C@@H](CO1)c1ccccc1)c1nnnn1c1ccccc1 1 1 1
MolPort-044-611-890_4 C[C@@H](NC(=O)NC[C@H]1C[C@H](CO1)c1ccccc1)c1nnnn1c1ccccc1 1 1 1
MolPort-044-564-956_2 O=C(NCCN1C[C@H]2C[C@H](C1)c1cccc(=O)n1C2)c1c2COc3ccccc3c2n[nH]1 11 11 11
MolPort-044-611-890_5 C[C@H](NC(=O)NC[C@@H]1C[C@@H](CO1)c1ccccc1)c1nnnn1c1ccccc1 1 1 1
MolPort-044-544-136_6 COc1c2C(=O)[C@@]3(Oc2c(Cl)c(OC)c1)[C@H](C)CC(=CC3=O)N[C@@H](Cc1ccccc1)C(=O)N 7 7 7
MolPort-044-959-262_3 OC(=O)[C@@H]1[C@@H]2C[C@H]1N(C2)C(=O)c1nonc1NC(=O)OCC1c2c(cccc2)c2c1cccc2 12 12 5
MolPort-045-096-602_4 N[C@H]1CC[C@H]2CN(C[C@H]12)C(=O)C1CCN(CC1)C(=O)c1cccc2ccccc12 9 9 9
MolPort-044-915-483_2 OC(=O)[C@H]1COCCN1C(=O)c1noc(NC(=O)OCC2c3c(cccc3)c3c2cccc3)c1 3 3 3
MolPort-044-566-273_8 [C@H]12CN(C[C@@H](C1)[C@H]1CCCC(=O)N1C2)C(=O)c1c([nH]nc1)c1cc2c(OCCO2)cc1 10 10 10
MolPort-044-939-996_1 OC(=O)[C@@H]1CN(CCO1)C(=O)C1(CCC1)NC(=O)OCC1c2c(cccc2)c2c1cccc2 6 6 6
MolPort-044-566-273_1 [C@@H]12CN(C[C@H](C1)[C@@H]1CCCC(=O)N1C2)C(=O)c1c([nH]nc1)c1cc2c(OCCO2)cc1 10 10 10
MolPort-044-566-273_5 [C@@H]12CN(C[C@H](C1)[C@H]1CCCC(=O)N1C2)C(=O)c1c([nH]nc1)c1cc2c(OCCO2)cc1 10 10 10
MolPort-045-089-868_6 Cc1c(nnn1c1cccc(c1)[N+](=O)[O-])C(=O)N[C@H]1[C@@H]2CCC[C@H]1C[C@H](N)C2 2 2 0
MolPort-045-089-868_3 Cc1c(nnn1c1cccc(c1)[N+](=O)[O-])C(=O)N[C@@H]1[C@H]2CCC[C@@H]1C[C@H](N)C2 2 2 0