2016-07-22 3 views
2

私はDataframeを持っていて、部分をハイライトするためにスタイルを追加しました。そしてHTMLに簡単にレンダリングできますが、PDFとして保存しようとするとスタイリングは失われます。誰もが任意のヒントを持っていますか?スタイルを追加した後、Pandas DataframeオブジェクトをPDFとして保存するにはどうすればよいですか?

import pandas as pd 
import numpy as np 
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 

def color_negative_red(val): 
    """ 
    Takes a scalar and returns a string with 
    the css property `'color: red'` for negative 
    strings, black otherwise. 
    """ 
    color = 'red' if val < 0 else 'black' 
    return 'color: %s' % color 

s = df.style.applymap(color_negative_red) 

私は今pandas.core.style.Styler目的である、sを取り、(赤として負の数を強調)フォーマットのすべてを節約しながら、PDFへのデータフレームを変換したいです。これを行う簡単な方法はありますか、またはまだ開発中のパンダのスタイルの仕組みですか?

+0

あなたはipython/jupytetを使用していたPDFを生成していますか? – Merlin

+0

@merlin、はい、私はスタイリングデータフレーム機能のための概念の証明を構築するためにジュピターノートブックインスタンスを使用しています。 –

+0

私は最後の2時間を保存しようとしていますが、簡単な方法がないようです(私は何も見つけられませんでした)。 Pittyは、HTMLの生のコードはボンネットのどこかにあるはずなので、この機能は非常に簡単に追加できると思います。 – quapka

答えて

0

ない最大の解決策が、それは

import pandas as pd 
import numpy as np 
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 

def color_negative_red(val): 
    """ 
    Takes a scalar and returns a string with 
    the css property `'color: red'` for negative 
    strings, black otherwise. 
    """ 
    color = 'red' if val < 0 else 'black' 
    return 'color: %s' % color 

s = df.style.applymap(color_negative_red) 

import pdfkit 
import tempfile 

options = { 
    'page-size': 'Letter', 
    'margin-top': '0.75in', 
    'margin-right': '0.75in', 
    'margin-bottom': '0.75in', 
    'margin-left': '0.75in', 
    'encoding': "UTF-8", 
    'lowquality': False, 
    'quiet':'', 
    'custom-header' : [ 
     ('Accept-Encoding', 'gzip') 
    ], 
    'cookie': [ 
     ('cookie-name1', 'cookie-value1'), 
     ('cookie-name2', 'cookie-value2'), 
    ], 
    'no-outline': None 
} 

tmp = tempfile.NamedTemporaryFile() 
with open(tmp.name, 'w') as f: 
    f.write(s._repr_html_()) 
with open(tmp.name, 'r') as f: 
    pdfkit.from_file(f, "s.pdf",options=options) 
f.close() 


display(s) 
関連する問題