gpt4 book ai didi

python-3.x - 在 R markdown 中渲染 Pandas 表

转载 作者:行者123 更新时间:2023-12-04 15:33:33 25 4
gpt4 key购买 nike

我是 python 菜鸟,但我正在尝试在 R Markdown 块中呈现使用下面的 python 代码生成的表。在 Jupyter 中运行时,python 代码会输出一个漂亮的格式化表,但我似乎无法在 Markdown 文档中复制它。

{python, engine.path = '/usr/bin/python3'}
import pandas as pd
import numpy as np

df1 = pd.read_csv(r'./data/crest_results_table.txt', sep='\t')
df2 = pd.read_csv(r'./data/crest_formats_table.txt', sep='\t')

results_table = df1.pivot_table(values=['Result'],index=['Anlys_Mthd','CAS','AnalTParam','RDCSRS','NRDCSRS','IGWSRS'],columns=['SampNum','LabID','SampDate'],aggfunc=np.max)

formats_table = df2.pivot_table(values=['Result'],index=['Anlys_Mthd','CAS','AnalTParam','RDCSRS','NRDCSRS','IGWSRS'],columns=['SampNum','LabID','SampDate'],aggfunc=np.max)

def color_cells(s):
if s == -1:
return 'color:{0}; background-color: white; font-weight:bold; font-style:italic; font-size:small'.format('black')
elif s == -2:
return 'color:{0}; background-color: orange; font-weight:bold; font-style:italic; font-size:small'.format('black')
elif s == -3:
return 'color:{0}; background-color: yellow; font-weight:bold; font-size:small'.format('black')
elif s == -4:
return 'color:{0}; background-color: beige; font-weight:bold; font-size:small'.format('black')
else:
return 'color:{0}; font-size:small'.format('grey')

t = results_table.style.apply(lambda x: formats_table.applymap(color_cells), axis=None)

ht = t.render()

我尝试然后使用 render() 方法将其保存为 html,然后在 R 块中保存或打印它
{r}
htmltools::save_html(py$ht, "table.html")
htmltools::html_print(py$ht)

但是,当我查看保存的 html 文件时,即使在浏览器中也无法正确呈现。

pandas 文档说了一些关于“将它包装在 IPython.display.HTML 中”的内容,但不知道任何 python 我不确定这意味着什么。

理想情况下,我希望 markdown 块使用完全相同的代码呈现格式与 jupyter 相同的表格。

谢谢

最佳答案

print(df.to_markdown())效果很好,但结果仍然很丑陋且没有交互性。在 R 块中,您可以使用 DT::datatable(py$df)编辑:
找到了一种在单个 python 块中显示 pandas df 的方法 rpy2 :

  • 创建 R 脚本 'pydisplaydf.r'
  • library(DT)

    PyDisplayDf <- function(dataframe) {
    dt <- DT::datatable(dataframe,
    options = list(lengthChange = FALSE,
    sDom = '<"top">lrt<"bottom">ip',
    paging = FALSE))
    dt
    }]
  • 从 Python 中获取 R 脚本并显示 df
  • from IPython.display import display

    import rpy2.rinterface as rinterface
    rinterface.initr()

    from rpy2.robjects import pandas2ri
    pandas2ri.activate()

    import rpy2.robjects as robjects

    r = robjects.r
    pydisplaydf = r.source('pydisplaydf.r')[0]

    display(pydisplaydf(df))
  • (可选的)
    由于每次显示 df 时都会看到 python 消息弹出很烦人,我发现这个脚本非常有用:
  • @contextmanager
    def suppress_stdout():
    with open(os.devnull, "w") as devnull:
    old_stdout = sys.stdout
    sys.stdout = devnull
    try:
    yield
    finally:
    sys.stdout = old_stdout
    然后在 Python 块中,像这样使用它:
    with suppress_stdout():
    pandas2ri.activate()
    r = robjects.r
    pydisplaydf = r.source('pydisplaydf.r')[0]

    display(pydisplaydf(df))
    df 很好地显示在 RStudio 的查看器 Pane 中:)

    关于python-3.x - 在 R markdown 中渲染 Pandas 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60557226/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com