es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El estilo de Pandas funciona en el cuaderno, pero la salida HTML parece no tener el estilo. ¿Qué está mal en esta situación?

Estoy tratando de mostrar un dataframe de pandas en un correo electrónico, así que estoy utilizando la función to_html() en un dataframe.

Cuando lo hago en jupyter, todo está bien..

df = pd.DataFrame(np.random.randn(5, 4), columns=['a', 'b', 'c', 'd'])
result = df.style.format(precision=2).set_table_styles([{'selector' : 'td,th', 'props' : [('border', '1px solid lightgrey')]}])

Pero si hago

result.to_html()

y luego pego el HTML resultante en un visor de HTML, obtengo lo siguiente. Sin bordes y con muchos \n. Así que no puedo imprimir en los reportes de correo electrónico. ¿Qué está pasando? ¿Qué debo hacer para obtener los bordes que se muestren en to_html()? ¿Hay otra forma de obtener el HTML? Gracias por la ayuda.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema con la salida HTML de la función result.to_html() es que los estilos CSS generados por el método encadenado df.style.format().set_table_styles() no se incluyen en el código HTML.

    Para solucionar este problema, puede agregar los estilos CSS al encabezado HTML manualmente envolviendo la salida de result.to_html() en una plantilla HTML que incluya una etiqueta de estilo con los estilos CSS necesarios. Aquí hay un ejemplo:

    # Definir los estilos CSS como una cadena
    css_style = """
    <style>
        table {
            border-collapse: collapse;
            width: 100%;
        }
    
        th, td {
            text-align: left;
            padding: 8px;
            border: 1px solid lightgrey;
        }
    
        tr:nth-child(even) {
            background-color: #f2f2f2;
        }
    
        th {
            background-color: #ccc;
            color: white;
        }
    </style>
    """
    
    # Generar el dataframe con estilo
    df = pd.DataFrame(np.random.randn(5, 4), columns=['a', 'b', 'c', 'd'])
    result = df.style.format(precision=2)
    
    # Agregar los estilos CSS y la tabla HTML a una plantilla HTML
    html_template = f"{css_style}\n{result.to_html()}"
    
    # Imprimir la salida HTML
    print(html_template)
    

    Esto producirá un bloque de código HTML que incluye los estilos CSS necesarios y la tabla HTML formateada:

    <style>
        table {
            border-collapse: collapse;
            width: 100%;
        }
    
        th, td {
            text-align: left;
            padding: 8px;
            border: 1px solid lightgrey;
        }
    
        tr:nth-child(even) {
            background-color: #f2f2f2;
        }
    
        th {
            background-color: #ccc;
            color: white;
        }
    </style>
    <table border="1" class="dataframe">
      <thead>
        <tr style="text-align: left;">
          <th></th>
          <th>a</th>
          <th>b</th>
          <th>c</th>
          <th>d</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <th>0</th>
          <td>-0.327632</td>
          <td>-2.083804</td>
          <td>-0.146759</td>
          <td>0.218357</td>
        </tr>
        <tr>
          <th>1</th>
          <td>-0.271601</td>
          <td>-1.045497</td>
          <td>0.664117</td>
          <td>-0.237963</td>
        </tr>
        <tr>
          <th>2</th>
          <td>-0.523496</td>
          <td>-0.109162</td>
          <td>0.152654</td>
          <td>-0.557317</td>
        </tr>
        <tr>
          <th>3</th>
          <td>-0.124943</td>
          <td>-0.788555</td>
          <td>1.135746</td>
          <td>0.953407</td>
        </tr>
        <tr>
          <th>4</th>
          <td>-0.941372</td>
          <td>-0.635325</td>
          <td>0.511779</td>
          <td>-1.113627</td>
        </tr>
      </tbody>
    </table>
    

    Este bloque de código debería ser compatible con la mayoría de los clientes de correo electrónico y mostrar el dataframe de pandas con bordes y estilo.

Comments are closed.