繁体   English   中英

行方式格式化pandas数据帧

Format pandas dataframe row wise

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我有以下数据框,并希望将其转换为HTML

            Limit        Status     Warning      3M AVG
VAR1        1.20         1.21216    1.11         1.21235
VAR2        0.82         0.63075    0.75         0.593295
VAR3        0.38         0.376988   0.35         0.376988
VAR4        0.17         0.126987   0.14         0.12461

我想逐行格式化这个数据帧,以便:

  1. 如果Status超过Warning ,整行将突出显示为黄色,如果超过Limit则整行将突出显示为红色
  2. VAR2VAR3具有“{:。2%}”格式, VAR1VAR4具有“{:。2f}”

我已经挖掘了pandas文档并尝试了几种方法,但我无法完成上述所有任务

如果您能提供帮助,我将不胜感激,因为我认为对于许多大熊猫用户而言,行格式化数据帧是一项挑战。

编辑1:我尝试了以下代码:

df=df.transpose()    
df.style.format("{:.2%}").format({"VAR1":"{:.2f},"VAR4":"{:.2f}"})

注意:通过转置数据框,可以更轻松地完成所有任务,但我无法将其转换回原始形状,因为它是样式器。

2 个回复

我认为您可以使用自定义样式功能执行您想要的操作:

def color(row):
    if row.Status >= row.Limit:
        return ['background-color: red'] * len(row)
    elif row.Status >= row.Warning:
        return ['background-color: yellow'] * len(row)
    return [''] * len(row)

df.style.apply(color, axis=1)

在此输入图像描述

但是,您仍然需要为此添加自定义数字格式。

要获取此代码的HTML代码,请使用render方法:

df.style.apply(color, axis=1).render()

 <style type="text/css" > #T_e61b55e0_cef5_11e8_9f07_68f72880acdcrow0_col0 { background-color: red; } #T_e61b55e0_cef5_11e8_9f07_68f72880acdcrow0_col1 { background-color: red; } #T_e61b55e0_cef5_11e8_9f07_68f72880acdcrow0_col2 { background-color: red; } #T_e61b55e0_cef5_11e8_9f07_68f72880acdcrow0_col3 { background-color: red; } #T_e61b55e0_cef5_11e8_9f07_68f72880acdcrow2_col0 { background-color: yellow; } #T_e61b55e0_cef5_11e8_9f07_68f72880acdcrow2_col1 { background-color: yellow; } #T_e61b55e0_cef5_11e8_9f07_68f72880acdcrow2_col2 { background-color: yellow; } #T_e61b55e0_cef5_11e8_9f07_68f72880acdcrow2_col3 { background-color: yellow; }</style> <table id="T_e61b55e0_cef5_11e8_9f07_68f72880acdc" > <thead> <tr> <th class="blank level0" ></th> <th class="col_heading level0 col0" >Limit</th> <th class="col_heading level0 col1" >Status</th> <th class="col_heading level0 col2" >Warning</th> <th class="col_heading level0 col3" >3M AVG</th> </tr></thead> <tbody> <tr> <th id="T_e61b55e0_cef5_11e8_9f07_68f72880acdclevel0_row0" class="row_heading level0 row0" >VAR1</th> <td id="T_e61b55e0_cef5_11e8_9f07_68f72880acdcrow0_col0" class="data row0 col0" >1.2</td> <td id="T_e61b55e0_cef5_11e8_9f07_68f72880acdcrow0_col1" class="data row0 col1" >1.21216</td> <td id="T_e61b55e0_cef5_11e8_9f07_68f72880acdcrow0_col2" class="data row0 col2" >1.11</td> <td id="T_e61b55e0_cef5_11e8_9f07_68f72880acdcrow0_col3" class="data row0 col3" >1.21235</td> </tr> <tr> <th id="T_e61b55e0_cef5_11e8_9f07_68f72880acdclevel0_row1" class="row_heading level0 row1" >VAR2</th> <td id="T_e61b55e0_cef5_11e8_9f07_68f72880acdcrow1_col0" class="data row1 col0" >0.82</td> <td id="T_e61b55e0_cef5_11e8_9f07_68f72880acdcrow1_col1" class="data row1 col1" >0.63075</td> <td id="T_e61b55e0_cef5_11e8_9f07_68f72880acdcrow1_col2" class="data row1 col2" >0.75</td> <td id="T_e61b55e0_cef5_11e8_9f07_68f72880acdcrow1_col3" class="data row1 col3" >0.593295</td> </tr> <tr> <th id="T_e61b55e0_cef5_11e8_9f07_68f72880acdclevel0_row2" class="row_heading level0 row2" >VAR3</th> <td id="T_e61b55e0_cef5_11e8_9f07_68f72880acdcrow2_col0" class="data row2 col0" >0.38</td> <td id="T_e61b55e0_cef5_11e8_9f07_68f72880acdcrow2_col1" class="data row2 col1" >0.376988</td> <td id="T_e61b55e0_cef5_11e8_9f07_68f72880acdcrow2_col2" class="data row2 col2" >0.35</td> <td id="T_e61b55e0_cef5_11e8_9f07_68f72880acdcrow2_col3" class="data row2 col3" >0.376988</td> </tr> <tr> <th id="T_e61b55e0_cef5_11e8_9f07_68f72880acdclevel0_row3" class="row_heading level0 row3" >VAR4</th> <td id="T_e61b55e0_cef5_11e8_9f07_68f72880acdcrow3_col0" class="data row3 col0" >0.17</td> <td id="T_e61b55e0_cef5_11e8_9f07_68f72880acdcrow3_col1" class="data row3 col1" >0.126987</td> <td id="T_e61b55e0_cef5_11e8_9f07_68f72880acdcrow3_col2" class="data row3 col2" >0.14</td> <td id="T_e61b55e0_cef5_11e8_9f07_68f72880acdcrow3_col3" class="data row3 col3" >0.12461</td> </tr></tbody> </table> 

我有同样的问题,并研究pandas.io.formats.style.Styler类中的format函数的实现,并实现了类似的行方式函数:

def format_row_wise(styler, formatter):
    for row, row_formatter in formatter.items():
        row_num = styler.index.get_loc(row)

        for col_num in range(len(styler.columns)):
            styler._display_funcs[(row_num, col_num)] = row_formatter
    return styler

示例

df = pandas.DataFrame(
    {
        'Limit': [1.20, 0.82, 0.38, 0.17], 
        'Status': [1.21216, 0.63075, 0.376988, 0.126987], 
        'Warning': [1.11, 0.75, 0.35, 0.14], 
        '3M AVG': [1.21235, 0.593259, 0.376988, 0.12461]
    }, 
    index=['VAR1', 'VAR2', 'VAR3', 'VAR4']
)
formatters = {"VAR1":lambda x: f"{x:.2f}", "VAR4": lambda x: f"{x:.2f}"}
styler = format_row_wise(df.style, formatters)
styler.render()

这对我有用:)

注意

  • 我只实现了dict格式化程序!
  • 格式必须作为函数给出(这里:lambda)

希望这能让你走上正确的道路......

2 如何格式化IPandy html显示的Pandas数据帧?

我怎样才能格式化IPython html显示的pandas数据帧呢 数字是正确的 数字有逗号作为千位分隔符 大浮点数没有小数位 我知道numpy具有set_printoptions ,我可以这样做: 和其他数据类型类似。 但是,当在html中显示数 ...

4 格式化数据帧

我之前只在这里发布过一次所以如果格式被关闭,请原谅我。 我还要说这是一个学校项目。 无论如何,我只是在学习熊猫、数据处理和 csv 并正在创建一个目录。 我的代码应该采用用户输入的文件并按艺术家、专辑、标题、持续时间和流派对其进行格式化。 我的问题是我需要创建一个名为 print_songs 的函 ...

5 格式化熊猫数据帧

我目前有一个看起来像这样的表: 但我希望它看起来像这样: 当只有一个联赛时,我可以让它看起来像它,但是当有多个联赛时,我不知道该怎么做。 如果无法完成,那么我将手动对其进行格式化,但最好在将其保存到文件之前自动进行格式化。 这是我当前的代码,用于删除我不想要的列并复制联赛名称,但它仅 ...

6 关于pandas数据帧的正则表达式更改列名,然后重新格式化数据帧格式

我有以下格式的数据帧。 想要修改列名并将数据帧重新排列为以下格式: - 我已经尝试了下面的代码将列名从对象转换为列表,然后剥离并拆分字符串。 但这样做之后仍然有空格。 不知道为什么。 移动到正则表达式以替换列名称以填充具有我想要的最终数据帧格式的ID列的那些 ...

9 如何在使用 XLSXWriter 写入 excel 之前格式化 Pandas 数据帧

我有一个名为 df1 的主数据帧,从这个 df1 中,我根据不同的条件获取了六个不同的数据帧。 后来我把所有这些都写到了不同的excel表上,所以我的excel表会有6张表。 我想要做的是,我需要用一种颜色为 A:D 的列标题着色,将 E:H 着色为另一种颜色等。但是 xlsx writer 已经 ...

10 从 Pandas 数据帧写入格式化的二进制文件

我已经看到了一些在 Python 中将格式化的二进制文件读取到 Pandas 的方法,即,我使用的这段代码使用 NumPy fromfile 读取,格式为使用 dtype 给出的结构。 现在,我的问题是如何将其写回新文件。 我在 NumPy 中找不到任何函数(在 Pandas 中都没有)允许我准 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM