2016-04-27 12 views
7

Ich folgte the style guide for pandas und es funktionierte ziemlich gut.Pandas to_html mit den. Style-Optionen oder benutzerdefinierten CSS?

Wie kann ich diese Stile mithilfe des Befehls to_html über Outlook behalten? Die Dokumentation scheint mir etwas zu fehlen.

(df.style 
    .format(percent) 
    .applymap(color_negative_red, subset=['col1', 'col2']) 
    .set_properties(**{'font-size': '9pt', 'font-family': 'Calibri'}) 
    .bar(subset=['col4', 'col5'], color='lightblue')) 

import win32com.client as win32 
outlook = win32.Dispatch('outlook.application') 
mail = outlook.CreateItem(0) 
mail.Subject = subject_name 
mail.HTMLbody = ('<html><body><p><body style="font-size:11pt; 
font-family:Calibri">Hello,</p> + '<p>Title of Data</p>' + df.to_html(
      index=False, classes=????????) '</body></html>') 
mail.send 

Die to_html Dokumentation zeigt, dass es ein Klasse gebieten, daß ich in der to_html Methode setzen kann, aber ich kann es nicht herausgefunden. Es scheint auch so, als ob mein Datenrahmen nicht den oben angegebenen Stil aufweist.

Wenn ich versuche:

df = (df.style 
     .format(percent) 
     .applymap(color_negative_red, subset=['col1', 'col2']) 
     .set_properties(**{'font-size': '9pt', 'font-family': 'Calibri'}) 
     .bar(subset=['col4', 'col5'], color='lightblue')) 

Dann df ist nun ein Style-Objekt und Sie können nicht to_html verwenden.

Edit - das mache ich gerade, um meine Tabellen zu ändern. Das funktioniert, aber ich kann die coolen Funktionen der .style-Methode, die Pandas bietet, nicht behalten.

email_paragraph = """ 
<body style= "font-size:11pt; font-family:Calibri; text-align:left; margin: 0px auto" > 
""" 

email_caption = """ 
<body style= "font-size:10pt; font-family:Century Gothic; text-align:center; margin: 0px auto" > 
""" 


email_style = '''<style type="text/css" media="screen" style="width:100%"> 
    table, th, td {border: 0px solid black; background-color: #eee; padding: 10px;} 
    th {background-color: #C6E2FF; color:black; font-family: Tahoma;font-size : 13; text-align: center;} 
    td {background-color: #fff; padding: 10px; font-family: Calibri; font-size : 12; text-align: center;} 
    </style>''' 
+0

Ich versuchte gestern stundenlang ohne Glück. Ich kann nicht herausfinden, wie man den Datenrahmen in Outlook anpasst. Es sieht hässlich aus (große Schrift). Der Datenrahmen auf meinem Computer sieht gut aus. Er zeigt an, wo die Metrik das Ziel nicht erreicht hat, und hat Balkendiagramme, um die Lautstärke anzuzeigen. Gibt es keine Möglichkeit, das auf der Outlook-E-Mail anzuzeigen? – trench

Antwort

11

Sobald Sie style an Ihre geketteten Zuweisungen hinzufügen, die Sie auf ein Styler Objekt arbeiten. Dieses Objekt hat eine render Methode, um den HTML-Code als String zu erhalten. Also in Ihrem Beispiel könnten Sie so etwas tun:

html = (
    df.style 
    .format(percent) 
    .applymap(color_negative_red, subset=['col1', 'col2']) 
    .set_properties(**{'font-size': '9pt', 'font-family': 'Calibri'}) 
    .bar(subset=['col4', 'col5'], color='lightblue') 
    .render() 
) 

Dann schließen die html in Ihrer E-Mail anstelle eines df.to_html().

+0

Das hat funktioniert und es sieht gut aus, danke! – trench

+0

Eigentlich habe ich gerade bemerkt, dass die Balkendiagramme nicht in der Outlook-E-Mail angezeigt werden. Alles andere funktioniert aber gut. Irgendwelche Ideen wie man es zur Anzeige bringt? – trench

1

Es ist keine extravagante/pythonische Lösung. Ich habe den Link in eine direkte CSS-Datei eingefügt, bevor der HTML-Code von der to_html() -Methode erstellt wurde, dann habe ich die ganze Zeichenfolge als HTML-Datei gespeichert. Das hat gut für mich funktioniert.

dphtml = r'<link rel="stylesheet" type="text/css" media="screen" href="css-table.css" />' + '\n' 
dphtml += dp.to_html() 

with open('datatable.html','w') as f: 
    f.write(dphtml) 
    f.close() 
    pass 
Verwandte Themen