2017-03-03 17 views
3

こんにちは私はパンダを使用してテーブルを表示しています。 そこには、読めるように交互の行の色を適用する機能があります。 以下のコードを使用して私はメールでテーブルを送信しています。python3 +パンダのスタイル+交互の行の色を変更する

私のコード:

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) 

答えて

1

あなたはあなたのケースに採用df.to_html(classes)

との組み合わせで、すなわちtr:nth-childをCSSを使用することができます。

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

UPDA te:具体的な例に拡大

で使用されている{}と競合していたので、CSSを追加できるようにコードを少し並べ替えました。変数をhtml_variables dictに追加し、%()sを使用してHTMLに埋め込むことができます。あなたのhtmlが複雑すぎる場合は、より堅牢なものにするためにいくつかのテンプレートエンジンを使用することをお勧めします。さもなければ、以下のコードは自明であるべきです。

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

こんにちはTorrinos、ありがとうございます!このhtmlコンテンツを表示(HTML(....))しておくと、実際のテーブルではなくオブジェクトだけが出力されます。私の場合は、htmlという変数にhtmlテンプレートを割り当てていますので、どうすればこのようにすることができますか? –

+0

上記の例を試してみてください。あなたのケースを正確に複製する問題があります。メッセージを送信しようとするためにsmtpサーバを設定したくない場合は、Jupyterノートブックを使用してhtmlレンダリングを正しく確認しています。上記の例は私のために働く。 – omdv

関連する問題