python
  • pandas
  • 2017-01-03 39 views 6 likes 
    6

    複数のデータフレームをメールとしてテーブルに送信しようとしています。 df.to_html()を使用して私は電子メール本文の一部として添付しているテーブルのHTML文字列をレンダリングすることができます。私は正常に電子メールのテーブルを取得することができます。パンダdataframe.to_html() - ヘッダーに背景色を追加する

    html.append(table.to_html(na_rep = " ",index = False)) 
    body = '\r\n\n<br>'.join('%s'%item for item in html) 
    msg.attach(MIMEText(body, 'html')) 
    

    しかし、これらの表のヘッダーに背景色を追加するにはどうすればよいですか?

    +3

    ['pandas.DataFrame.style'](http://pandas.pydata.org/pandas-docs/version/0.17.1/generated/pandas.core.style.Styler.html)を参照してください。 'set_table_styles'があなたの' HTML'属性を設定するために使用でき、 '.render()'メソッドを使ってHTMLスクリプトを取得することができます。 – Abdou

    +0

    @Abdou 'set_table_styles'に適切な属性を与える方法の例を挙げてください。私は比較的新しいHTMLとCSSを使っています – Zedak

    答えて

    8

    次の2つの方法でこれをやって試すことができます:

    set_table_stylespandas.DataFrame.styleから:

    import pandas as pd 
    import numpy as np 
    
    # Set up a DataFrame 
    np.random.seed(24) 
    df = pd.DataFrame({'A': np.linspace(1, 10, 10)}) 
    df = pd.concat([df, pd.DataFrame(np.random.randn(10, 4), columns=list('BCDE'))], 
           axis=1) 
    df.iloc[0, 2] = np.nan 
    
    
    df_html_output = df.style.set_table_styles(
        [{'selector': 'thead th', 
        'props': [('background-color', 'red')]}, 
        {'selector': 'thead th:first-child', 
        'props': [('display','none')]}, 
        {'selector': 'tbody th:first-child', 
        'props': [('display','none')]}] 
    ).render() 
    
    html.append(df_html_output) 
    body = '\r\n\n<br>'.join('%s'%item for item in html) 
    msg.attach(MIMEText(body, 'html')) 
    

    または.to_htmlと:

    df_html_output = df.to_html(na_rep = "", index = False).replace('<th>','<th style = "background-color: red">') 
    
    html.append(df_html_output) 
    body = '\r\n\n<br>'.join('%s'%item for item in html) 
    msg.attach(MIMEText(body, 'html')) 
    

    は、第1には、あまりにも多くのHTML微調整を行うことなく、輸出(to_html)中にインデックス列を削除するオプションを提供します。あなたのニーズにより適しているかもしれません。

    私はこれが有用であることを望みます。

    +0

    の上に別のタグを追加してgmailをクリップするので、 'set_table_styles'はGmail上で動作しないようです。 'to_html'は動作しますが、複雑なセレクタを使用することはできません。 – Anupam

    2

    便利なHTML書式設定のためにJinja2を使用することをおすすめします。単語文書を作成し、{{Header}}に背景色({{DF}})を追加し、改ページを追加してhtmlとして保存します。今度はJinja2を使ってテンプレートをレンダリングします。以下はJinja2のはどのように使用できるかのサンプルコードです:

    from jinja2 import Environment, FileSystemLoader 
    import StringIO 
    import pandas as pd 
    
    Template_Path = '/home/test/' 
    DF = [pd.DataFrame()]*5 # List of Dataframes 
    Header_Text = ['header']*5 # list of headers 
    env = Environment(loader=FileSystemLoader(Template_Path)) 
    template = env.get_template('PDF_Temp.html') # name of your html template 
    
    Master_HTML = '' 
    for x in range(len(DF)): 
        buf = StringIO.StringIO() 
        DF_HTML = DF[x].to_html(buf) 
        template_vars = {"Header"   : Header_Text[x] , 
            "DF"    : buf.getvalue() 
            } 
    
        # Create PDF 
        Master_HTML += template.render(template_vars) 
    
    FN = 'test.html' 
    with open(FN, "w") as f: 
        f.write(Master_HTML.encode('utf-8')) 
    

    これはJinja2の上の素敵なチュートリアルです: http://pbpython.com/pdf-reports.html

    関連する問題