当前位置: 首页 > 面试题库 >

熊猫:具有条件格式的HTML输出

翁鸿远
2023-03-14
问题内容

我正在尝试格式化表格,以使每一列中的数据根据​​其值以某种格式格式化(类似于电子表格程序中的条件格式)。如何使用HTML格式化程序在熊猫中实现这一目标?

典型的用例是突出显示表中的重要值。例如:

    correlation  p-value
0   0.5          0.1
1   0.1          0.8
2   0.9          *0.01*

pandas允许为HTML输出定义自定义格式器-要获得上述输出,可以使用:

import pandas as pd
from pandas.core import format
from StringIO import StringIO
buf = StringIO()
df = pd.DataFrame({'correlation':[0.5, 0.1,0.9], 'p_value':[0.1,0.8,0.01]})
fmt = format.DataFrameFormatter(df, 
          formatters={'p_value':lambda x: "*%f*" % x if x<0.05 else str(x)})
format.HTMLFormatter(fmt).write_result(buf)

但是,我想将样式更改为有意义的值(例如,通过使用粗体字体)。

一种可能的解决方案是将CSS类附加到<td>HTML输出中的标记,然后可以使用CSS样式表对其进行格式化。以上内容将变为:

<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>correlation</th>
      <th>p_value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>0</td>
      <td> 0.5</td>
      <td> 0.10</td>
    </tr>
    <tr>
      <td>1</td>
      <td> 0.1</td>
      <td> 0.80</td>
    </tr>
    <tr>
      <td>2</td>
      <td> 0.9</td>
      <td class='significant'> 0.01</td>
    </tr>
  </tbody>
</table>

编辑 :如@ Andy-Hayden所建议,我可以<span class="signifcant">...</span>示例中通过简单地替换星号来添加格式:

import pandas as pd
from StringIO import StringIO
buf = StringIO()
significant = lambda x: '<span class="significant">%f</span>' % x if x<0.05 else str(x)
df = pd.DataFrame({'correlation':[0.5, 0.1,0.9], 'p_value':[0.1,0.8,0.01]})
df.to_html(buf, formatters={'p_value': significant})

较新版本的熊猫转义标签。为避免它,将最后一行替换为:

df.to_html(buf, formatters={'p_value': significant}, escape=False)

问题答案:

您可以使用参数to_html附带的DataFrame方法formatters

一个更简单的解决方案是用<span class="significant">和包围</span>(而不是*)。注意:默认情况下,此参数将被转义(即<成为&lt;),因此您需要使用escape=False参数。



 类似资料:
  • 我有一个熊猫数据框: 如果结果被认为是重要的,是否可以将单元格(如Excel表格中的单元格)设置为粗体,而不是添加带星号的列? 在一行中以粗体显示DataFrame()值似乎只能格式化整行-我想只重新格式化一个特定的单元格 有条件地格式化Python熊猫单元格 看起来很相似,虽然它们只改变背景,而不是粗体的格式。 下面的代码已经可以更改背景颜色了-我只是不知道如何设置为粗体。

  • 我试图开发以下过滤器与熊猫数据帧: 我有四列,,,和 如何将其作为聚合函数编写? 下面是一个编写效率低下的工作示例: 输出:

  • 我想基于多个条件的评估创建一系列新的逻辑值。 举个例子 然而,我想返回一个逻辑序列,即。 如果可能的话,我想用熊猫的方法。

  • 问题内容: 如何将条件逻辑应用于Pandas DataFrame。 请参见下面显示的DataFrame, 我的原始数据显示在“数据”列中,并且期望的输出显示在其旁边。如果“数据”中的数字小于2.5,则所需的输出为False。 我可以应用循环并重新构建DataFrame …但是那是“非Python的” 问题答案: 只需将列与该值进行比较:

  • 在哪里可以配置Jupyter,使DataFrame对象在默认情况下显示为带边框的完整表? 现在看起来是这样的:

  • 问题内容: 我有一个数据集,其中我试图确定每个人的危险因素数量。所以我有以下数据: 每个属性(年龄,吸烟者,糖尿病)都有自己的条件来确定是否是危险因素。因此,如果年龄> = 45,则是一个危险因素。吸烟者和糖尿病为“ Y”是危险因素。我想要添加一列,以根据这些条件总计每个人的风险因素数量。因此数据如下所示: 我有一个样本数据集,我在Excel中鬼混,而我这样做的方式是使用COUNTIF公式,如下所

  • 我试图使用beautiful soup刮一个html表,并将其导入熊猫--http://www.baseball-reference.com/teams/nym/2017.shtml--“Team Batting”表。 找表没问题: 现在我很难把所有的东西放在一个数据帧中。以下是我目前掌握的信息: 这一次只适用于一行。我的问题是如何同时对表中的每一行都这样做?

  • 问题内容: 我正在尝试使用Pandas在几个条件下进行布尔索引。我原来的DataFrame称为。如果执行以下操作,将得到预期的结果: 但是,如果我这样做(我认为应该是等效的),则不会返回任何行: 知道导致差异的原因是什么? 问题答案: 使用是因为运算符优先级: 或者,在单独的行上创建条件: 样品 :