我正在尝试使用一个粗体列返回df.to_html()。我只尝试过
df = pd.DataFrame({'important_column': [1,2,3,4],
'dummy_column': [5,6,7,8]})
def some_function()
df.apply(lambda x: '<b>' + str(df['important_column']) + '</b>', axis=1)
return [df.to_html()]
但是它似乎不起作用。有谁知道一种可行的解决方案?
答案 0 :(得分:2)
您忘了分配输出,但是更快的向量化解决方案是将列转换为字符串,并使用apply
字符串添加不包含f
的字符串:
def some_function():
df['important_column'] = [f'<b>{x}</b>' for x in df['important_column']]
#alternative1
df['important_column'] = '<b>' + df['important_column'].astype(str) + '</b>'
#alternative2
#df['important_column'] = df['important_column'].apply(lambda x: '<b>' + str(x) + '</b>')
#alternative3, thanks @Jon Clements
#df['important_column'] = df['important_column'].apply('<b>{}</b>?'.format)
return df.to_html()
编辑:
df['important_column'] = [f'<b>{x}</b>' for x in df['important_column']]
print (df.to_html(escape=False))
<table border="1" class="dataframe">
<thead>
<tr style="text-align: right;">
<th></th>
<th>important_column</th>
<th>dummy_column</th>
</tr>
</thead>
<tbody>
<tr>
<th>0</th>
<td><b>1</b></td>
<td>5</td>
</tr>
<tr>
<th>1</th>
<td><b>2</b></td>
<td>6</td>
</tr>
<tr>
<th>2</th>
<td><b>3</b></td>
<td>7</td>
</tr>
<tr>
<th>3</th>
<td><b>4</b></td>
<td>8</td>
</tr>
</tbody>
</table>
时间:
df = pd.DataFrame({'important_column': [1,2,3,4],
'dummy_column': [5,6,7,8]})
df = pd.concat([df] * 10000, ignore_index=True)
In [213]: %timeit df['important_column'] = [f'<b>{x}</b>' for x in df['important_column']]
74 ms ± 22.2 ms per loop (mean ± std. dev. of 7 runs, 100 loops each)
In [214]: %timeit df['important_column'] = df['important_column'].apply(lambda x: '<b>' + str(x) + '</b>')
150 ms ± 7.75 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
In [216]: %timeit df['important_column'].apply('<b>{}</b>?'.format)
133 ms ± 238 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
In [217]: %timeit '<b>' + df['important_column'].astype(str) + '</b>'
266 ms ± 1.21 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
答案 1 :(得分:0)
您可以使用df.style.set_properties
,然后使用.render()
,这将在.to_html()
的普通表输出中加上适当的style
元素。 (请注意,这不会物理上将文本元素包装在<b>
或<strong>
或您想要的任何标签中,而只是为这些单元格提供样式-取决于您想要或不取决于您的样式用例)
html = df.style.set_properties(
subset=['important_column'],
**{'font-weight': 'bold'}
).render()
(在jupyter笔记本中显示的示例)
答案 2 :(得分:0)
我的错是我没有正确解决问题,我需要在函数末尾添加df.to_html(),因为此html显示在使用flask创建的网页上,因此以上为我工作。
我找到了适合自己需求的廉价解决方案:
def some_function():
df['important_column'] = '^' + df['important_column'].astype(str) + '+'
return [df.to_html(classes='greenARTstyle').replace('^', '<b>').replace('+', '</b>')]