Aplicar la clase CSS a Pandas DataFrame usando to_html

Tengo problemas para aplicar el argumento de “clases” con el método “to_html” de Pandas para diseñar un DataFrame.

“classes: str o list or tuple, por defecto Ninguna (s) clase (s) CSS para aplicar a la tabla html resultante” de: https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.to_html. html

Soy capaz de renderizar un DataFrame con estilo como este (por ejemplo):

df = pd.DataFrame([[1, 2], [1, 3], [4, 6]], columns=['A', 'B']) myhtml = df.style.set_properties(**{'font-size': '11pt', 'font-family': 'Calibri','border-collapse': 'collapse','border': '1px solid black'}).render() with open('myhtml.html','w') as f: f.write(myhtml) 

¿Cómo puedo aplicar estilo a la salida html de un DataFrame usando “clases” con “to_html” de esta manera?

 df.to_html('myhtml.html',classes=) 

Pandas ‘ to_html simplemente genera una cadena grande que contiene el marcado de tabla HTML. El argumento de las clases es un controlador de conveniencia para otorgar a la

un atributo de clase al que se hará referencia en un documento CSS creado anteriormente que lo diseñe. Por lo tanto, incorpore to_html en un documento HTML más amplio que haga referencia a un CSS externo.

Curiosamente, to_html agrega clases duales

que se puede hacer referencia en CSS individualmente, .dataframe {...} .mystyle{...} , o juntos .dataframe.mystyle {...} . A continuación se demuestra con datos aleatorios.

Datos

 import pandas as pd import numpy as np pd.set_option('display.width', 1000) pd.set_option('colheader_justify', 'center') np.random.seed(6182018) demo_df = pd.DataFrame({'date': np.random.choice(pd.date_range('2018-01-01', '2018-06-18', freq='D'), 50), 'analysis_tool': np.random.choice(['pandas', 'r', 'julia', 'sas', 'stata', 'spss'],50), 'database': np.random.choice(['postgres', 'mysql', 'sqlite', 'oracle', 'sql server', 'db2'],50), 'os': np.random.choice(['windows 10', 'ubuntu', 'mac os', 'android', 'ios', 'windows 7', 'debian'],50), 'num1': np.random.randn(50)*100, 'num2': np.random.uniform(0,1,50), 'num3': np.random.randint(100, size=50), 'bool': np.random.choice([True, False], 50) }, columns=['date', 'analysis_tool', 'num1', 'database', 'num2', 'os', 'num3', 'bool'] ) print(demo_df.head(10)) # date analysis_tool num1 database num2 os num3 bool # 0 2018-04-21 pandas 153.474246 mysql 0.658533 ios 74 True # 1 2018-04-13 sas 199.461669 sqlite 0.656985 windows 7 11 False # 2 2018-06-09 stata 12.918608 oracle 0.495707 android 25 False # 3 2018-04-24 spss 88.562111 sql server 0.113580 windows 7 42 False # 4 2018-05-05 spss 110.231277 oracle 0.660977 windows 10 76 True # 5 2018-04-05 sas -68.140295 sql server 0.346894 windows 10 0 True # 6 2018-05-07 julia 12.874660 postgres 0.195217 ios 79 True # 7 2018-01-22 r 189.410928 mysql 0.234815 windows 10 56 False # 8 2018-01-12 pandas -111.412564 sql server 0.580253 debian 30 False # 9 2018-04-12 r 38.963967 postgres 0.266604 windows 7 46 False 

CSS (guardar como df_style.css)

 /* includes alternating gray and white with on-hover color */ .mystyle { font-size: 11pt; font-family: Arial; border-collapse: collapse; border: 1px solid silver; } .mystyle td, th { padding: 5px; } .mystyle tr:nth-child(even) { background: #E0E0E0; } .mystyle tr:hover { background: silver; cursor: pointer; } 

Pandas

 pd.set_option('colheader_justify', 'center') # FOR TABLE  html_string = '''  HTML Pandas Dataframe with CSS   {table}  . ''' # OUTPUT AN HTML FILE with open('myhtml.html', 'w') as f: f.write(html_string.format(table=demo_df.to_html(classes='mystyle'))) 

SALIDA

HTML (hace referencia a df_style.css, asumido en el mismo directorio; vea el argumento de la clase en la tabla)

  HTML Pandas Dataframe with CSS    ... 
date analysis_tool num1 database num2 os num3 bool
0 2018-04-21 pandas 153.474246 mysql 0.658533 ios 74 True
1 2018-04-13 sas 199.461669 sqlite 0.656985 windows 7 11 False
2 2018-06-09 stata 12.918608 oracle 0.495707 android 25 False
3 2018-04-24 spss 88.562111 sql server 0.113580 windows 7 42 False
4 2018-05-05 spss 110.231277 oracle 0.660977 windows 10 76 True

Salida HTML

Así es como lo hice.

Cree un archivo de texto para el código css y escriba su código css aquí, diga css_style.txt Ahora lea este archivo txt como una cadena en su archivo python

with open('css_style.txt', 'r') as myfile: style = myfile.read()

Ahora en código HTML

 """Something Something{1}
{0}
""".format(some_panda_dataframe.to_html,style)

Aquí en mi caso el archivo css_style.txt es