2017-03-03 5 views
3

Hallo ich benutze Pandas und zeige eine Tabelle. Ich habe dort eine Funktion zum Anwenden von alternativer Zeilenfarbe, um das Lesen zu erleichtern. Unter Verwendung von Code Ich sende Tabelle in Mail und es funktioniert.python3 + Pandas Stile + Ändern Sie die Farbe der Zeilen abwechselnd

mein Code:

count = 1000 
df = pandas.DataFrame.from_dict(result) 
df["Total"] = df.T.sum() 

html = """<!DOCTYPE html> 
<html> 
    <body> 
    <h3> %i</h3> 
    {table_content} 
    </body> 
</html> 
""" % count 


# Create message container - the correct MIME type is 
# multipart/alternative. 
msg = MIMEMultipart('alternative') 
msg['Subject'] = " Report" 
msg['From'] = sender 
msg['To'] = recipients 


part2 = MIMEText(html.df(
    table_content=df.to_html(na_rep="0")), 'html') 

msg.attach(part2) 

Antwort

1

Sie können CSS verwenden, nämlich die tr:nth-child in Kombination mit df.to_html(classes)

zu Ihrem Fall annehmen:

from IPython.display import display, HTML 
from sklearn.datasets import load_iris 
import pandas as pd 
import numpy as np 

iris = load_iris() 
df = pd.DataFrame(data= np.c_[iris['data'], iris['target']], 
        columns= iris['feature_names'] + ['target']) 
HTML(''' 
     <style> 
      .df tbody tr:nth-child(even) { background-color: lightblue; } 
     </style> 
     ''' + df.to_html(classes="df")) 

Screenshot from Jupyter notebook

AKTUALISIER te: Erweiterung auf ein spezielles Beispiel

ich neu geordnet leicht den Code CSS ermöglichen das Hinzufügen, wie es mit {} von .format verwendet Konflikt wurde. Sie können Ihre Variablen zu html_variables dict hinzufügen und %()s verwenden, um sie in HTML einzubetten. Wenn Ihr HTML-Code zu kompliziert wird, empfehle ich die Verwendung einiger Template-Engine, um es robuster zu machen. Ansonsten sollte der folgende Code selbsterklärend sein.

html_template = '''<!DOCTYPE html> 
<html> 
    <head> 
    <style>.df tbody tr:nth-child(even) {background-color: lightblue;}</style> 
    </head> 
    <body> 
    <h3>%(other_var)s</h3> 
    %(table_content)s 
    </body> 
</html> 
''' 

html_vars = {'other_var':'IRIS Dataset','table_content':df.to_html(classes="df")} 

html = html_template % html_vars 

# Create message container - the correct MIME type is 
# multipart/alternative. 
msg = MIMEMultipart('alternative') 
msg['Subject'] = "Report" 
msg['From'] = sender 
msg['To'] = recipient 

part2 = MIMEText(html, 'html') 
msg.attach(part2) 
+0

Hallo Torrinos, Danke! wenn ich diesen HTML-Inhalt in display (HTML (....))) setze, druckt es nur Objekt und nicht die eigentliche Tabelle. In meinem Fall weise ich der HTML-Vorlage eine Variable namens html zu, also wie kann ich das in meinem Fall erreichen. –

+0

Versuchen Sie das obige Beispiel. Ich habe Probleme, Ihren Fall genau zu replizieren - ich möchte den SMTP-Server nicht einrichten, um eine Nachricht zu senden. Ich überprüfe, ob HTML korrekt mit dem Jupyter-Notebook gerendert wird. Das obige Beispiel funktioniert für mich. – omdv

Verwandte Themen