2016-07-22 14 views
2

我有一个数据框,并添加了样式来突出显示部分等,并可以很容易地呈现为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) 

我想现在就s,这是一个pandas.core.style.Styler对象和数据帧转换为PDF格式,同时节省所有格式(突出负数为红色)。有没有一个简单的方法来做到这一点,还是熊猫的风格机制仍在开发中?

+0

您正在使用的IPython/jupytet? – Merlin

+0

@merlin,是的,我正在使用一个jupyter笔记本实例来构建一个样式数据框架函数的概念验证。 –

+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) 
相关问题