我正在尝试格式化表格,以使每一列中的数据根据其值以某种格式格式化(类似于电子表格程序中的条件格式)。如何使用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>
(而不是*
)。注意:默认情况下,此参数将被转义(即<
成为<
),因此您需要使用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称为。如果执行以下操作,将得到预期的结果: 但是,如果我这样做(我认为应该是等效的),则不会返回任何行: 知道导致差异的原因是什么? 问题答案: 使用是因为运算符优先级: 或者,在单独的行上创建条件: 样品 :