2016-07-22 1 views
2

데이터 프레임이 있고 부분을 강조 표시하기 위해 스타일을 추가했으며 HTML로 쉽게 렌더링 할 수 있지만 PDF로 저장하려고하면 스타일이 손실됩니다. 누구든지 어떤 조언이 있으십니까? 팬더 데이터 프레임 개체에 스타일을 추가 한 후 팬더 데이터 프레임 개체를 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로 DataFrame을 변환 할. 이 작업을 수행하는 간단한 방법이 있거나 팬더의 스타일 메커니즘이 아직 개발 중입니까?

+0

을 생산하지 않습니다 당신은/jupytet을 ipython 사용하고 있습니까? – Merlin

+0

@merlin, 네, jupyter 노트북 인스턴스를 사용하여 스타일링 데이터 프레임 기능을위한 Proof of Concept을 구축하고 있습니다. –

+0

나는이 두 시간을 절약하려고 노력하고 있습니다. 쉬운 방법이없는 것처럼 보입니다. Pitty는 html 원시 코드가 어딘가에 있어야하기 때문에이 기능을 추가하는 것이 매우 쉽다고 생각합니다. – quapka

답변

0

하지 최고의 솔루션 있지만,이 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) 

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)