Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 添加样式后,如何将Pandas Dataframe对象保存为PDF?_Python_Pdf_Pandas_Dataframe_Styles - Fatal编程技术网

Python 添加样式后,如何将Pandas Dataframe对象保存为PDF?

Python 添加样式后,如何将Pandas Dataframe对象保存为PDF?,python,pdf,pandas,dataframe,styles,Python,Pdf,Pandas,Dataframe,Styles,我有一个Dataframe,并向其中添加了样式以突出显示部分等,并且可以轻松地渲染为HTML,但当尝试保存为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('

我有一个Dataframe,并向其中添加了样式以突出显示部分等,并且可以轻松地渲染为HTML,但当尝试保存为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)
将熊猫作为pd导入
将numpy作为np导入
np.随机种子(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颜色\负片\红色(val):
"""
获取标量并返回带有
css属性“color:red”表示负片
字符串,否则为黑色。
"""
颜色=‘红色’,如果val<0,则为‘黑色’
返回“颜色:%s”%color
s=df.style.applymap(彩色\负片\红色)

现在我想使用
s
,这是一个
pandas.core.style.Styler
对象,并将数据帧转换为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)

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)
将熊猫作为pd导入
将numpy作为np导入
np.随机种子(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颜色\负片\红色(val):
"""
获取标量并返回带有
css属性“color:red”表示负片
字符串,否则为黑色。
"""
颜色=‘红色’,如果val<0,则为‘黑色’
返回“颜色:%s”%color
s=df.style.applymap(彩色\负片\红色)
导入pdfkit
导入临时文件
选项={
“页面大小”:“字母”,
“页边距顶部”:“0.75英寸”,
“右边距”:“0.75英寸”,
“页边距底部”:“0.75英寸”,
“左边距”:“0.75英寸”,
“编码”:“UTF-8”,
“低质量”:错误,
“安静”:“,
“自定义标题”:[
('Accept-Encoding','gzip')
],
“饼干”:[
('cookie-name1'、'cookie-value1'),
('cookie-name2'、'cookie-value2'),
],
“无大纲”:无
}
tmp=tempfile.NamedTemporaryFile()
将open(tmp.name,'w')作为f:
f、 写入(s._repr_html_u3;)
将open(tmp.name,'r')作为f:
pdfkit.from_文件(f,“s.pdf”,options=options)
f、 关闭()
显示器

你在使用ipython/jupytet吗?@merlin,是的,我正在使用一个jupyter笔记本实例来为数据帧函数的样式构建概念证明。我正在尝试保存这最后两个小时,似乎没有任何简单的方法(我也没有发现任何困难)。Pitty,我认为,这个功能很容易添加,因为html原始代码应该在后台的某个地方。@quapka感谢您的尝试,是的,我也尝试了各种方法,从困难的返回到易于将其转换为可保存的格式,但无法理解。我现在只拍了一些屏幕截图,我相信这将是未来可用的功能。再次感谢您的尝试!我正在考虑自己写这篇文章。我最终会得到什么。。如果有用的话,我会让你知道的。