Python 将数据框中的粗体列转换为html

Python 将数据框中的粗体列转换为html,python,html,pandas,Python,Html,Pandas,我试图用一个粗体列返回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) retu

我试图用一个粗体列返回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()]
df=pd.DataFrame({'important_column':[1,2,3,4],
“虚拟列”:[5,6,7,8]})
def some_函数()
应用(lambda x:''+str(df['important_column'])+'',axis=1)
返回[df.to_html()]

但它似乎不起作用。有人知道一个实用的解决方案吗?

您忘记了分配输出,但更快的矢量化解决方案是将列转换为字符串,并使用
f
字符串添加不带
apply
的字符串:

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()
def some_函数():
df['maintal_column']=[f'{x}'表示df['maintal_column']]中的x
#备选方案1
df['maintal_column']=''+df['maintal_column'].astype(str)+''
#备选方案2
#df['importional_column']=df['importional_column']。应用(lambda x:''+str(x)+'')
#备选方案3,谢谢@Jon Clements
#df['maintal_column']=df['maintal_column'].apply('{}?'.format)
返回df.to_html()
编辑:

df['maintal_column']=[f'{x}'表示df['maintal_column']]中的x
打印(df.to_html(escape=False))
重要专栏
虚拟柱
0
1.
5.
1.
2.
6.
2.
3.
7.
3.
4.
8.
计时

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)
df=pd.DataFrame({'important_column':[1,2,3,4],
“虚拟列”:[5,6,7,8]})
df=pd.concat([df]*10000,忽略索引=True)
在[213]中:%timeit df['important_column']=[f'{x}'表示df['important_column']]中的x
每个回路74 ms±22.2 ms(7次运行的平均值±标准偏差,每个100个回路)
在[214]中:%timeit df['importional_column']=df['importional_column']。应用(lambda x:''+str(x)+'')
每个回路150 ms±7.75 ms(7次运行的平均值±标准偏差,每个10个回路)
在[216]中:%timeit df['important_column'].apply('{}?'.format)
每个回路133 ms±238µs(7次运行的平均值±标准偏差,每个10个回路)
在[217]:%timeit'+df['important_column'].astype(str)+'
每个回路266 ms±1.21 ms(7次运行的平均值±标准偏差,每个回路1次)

您可以使用
df.style.set\u properties
,然后使用
.render()
.to\u html()
的正常表输出加上适当的
style
元素作为前缀。(请注意,这不会将文本元素物理地包装在
或任何您希望的标记中,而是纯粹为这些单元格提供样式-这可能是您想要的,也可能不是您想要的,具体取决于用例)

(如jupyter笔记本所示)


这是我的错,我没有正确地回答这个问题,我需要在函数的末尾有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>')]
def some_函数():
df['maintal_column']='^'+df['maintal_column'].astype(str)+'+'
返回[df.to_html(class='greenARTstyle')。替换('^','')。替换('+','')]

df['important_column'].apply({}?.format)
的性能也应该相当好-它可以让格式处理到字符串的转换,并使标记更可读,更容易调整imho。@JonClements-你说得对,刚刚测试过<[198]中的code>df=pd.concat([df]*1000,忽略_index=True):%timeit df[“重要_列]。在[199]中应用({}格式):%timeit'+df[“重要_列]。aType(str)+'
1.75 ms±278µs/循环(平均±标准偏差7次,每个循环1000次)2.6 ms±24.4µs/循环(平均±标准偏差7次,每个循环100次)
检查我的编辑,需要
打印(df.to_html(escape=False))
您的烧瓶中是否已经有您正在使用的样式表?如果是这种情况,那么您可以返回
df.to_html(class='important'u table')
以便识别它,然后调整现有样式表,使其具有
table.important\u table td.col1{font-weight:bold}
…谢谢@jezrael works!对Jon来说,我对CSS很不熟悉,我很难适应它。我们公司很少有网页设计师,我创建的网页只是为了满足内部需求,所以。。。是的,我不时需要最简单的解决方案-除非你真的,真的需要在你的单元格周围有
标记(如果它只是为了在应用程序中显示的话,很可能不需要)-然后你只需要让浏览器通过样式为列呈现粗体。。。也就是说,如果你想更改颜色/大小/对齐方式或背景,你可以在一个地方更改,而不引入更多html(并担心转义)…@Finrod fine。。。只是说这其实不是一个简单的方法。。。在jinja2模板中使用类似于
{{table | safe}}
的东西,并将下面我的答案中的
html
传递给模板,因为
table
不起作用:(。
html = df.style.set_properties(
    subset=['important_column'], 
    **{'font-weight': 'bold'}
).render()
def some_function():
    df['important_column'] = '^' + df['important_column'].astype(str) + '+'
    return [df.to_html(classes='greenARTstyle').replace('^', '<b>').replace('+', '</b>')]