2016-04-27 14 views
7

私はthe style guide for pandasをフォローしていて、かなりうまくいきました。pandas to_html .styleオプションまたはカスタムCSSを使用していますか?

Outlookからto_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')) 

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 

to_htmlのドキュメントでは、クラスは、私がto_html方法の内側に置くことができるというコマンドがあることを示しているが、私はそれを把握することはできません。私のデータフレームは、私が一番上に指定したスタイルを持っていないようです。

私がしようとした場合:

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')) 

その後DFが今Styleオブジェクトであり、あなたがto_htmlを使用することはできません。

編集 - これは現在私がテーブルを変更するために行っていることです。これは動作しますが、パンダが提供する.styleメソッドのクールな機能を保つことはできません。あなたがチェーンの割り当てへstyleを追加すると

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

私は昨日何時も運がありませんでした。私はOutlookでデータフレームをカスタマイズする方法を理解できません。それは醜い(大きなフォント)に見えます。私のコンピュータ上のデータフレームは素晴らしく見えます。メトリックがターゲットを満たさなかった場所を強調表示し、ボリュームを示す棒グラフを表示します。 Outlookの電子メールに表示する方法はありませんか? – trench

答えて

11

あなたはStylerオブジェクト上で動作しています。そのオブジェクトには、htmlを文字列として取得するためのrenderメソッドがあります。そして、代わりにdf.to_html()のメールでhtmlが含ま

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() 
) 

:だからあなたの例では、あなたはこのような何かを行うことができます。

+0

これはうまくいきました。 – trench

+0

実際、Outlookのメールに棒グラフが表示されていないことに気がつきました。他のすべてがうまくいきます。任意のアイデアを表示する方法を教えてください? – trench

1

これは贅沢な/ピジョンソニックソリューションではありません。 to_html()メソッドで作成されたHTMLコードの前に直接CSSファイルへのリンクを挿入した後、その文字列全体をhtmlファイルとして保存しました。これは私のためにうまくいった。

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 
関連する問題