组合 pandas "data frame.style" 个对象并输出到 html

Combining pandas "data frame.style" objects and outputting to html

我想合并使用以下方法的 pandas df.style 对象 - df.style.background_gradientdf.style.bar 并将结果导出到 html。

当我有单独的对象时,我就成功了。这是一个示例数据框:

df = pd.DataFrame(np.random.randn(15).reshape(5, 3))

然后我可以将其传递给不同的样式方法:

# Use method "background_gradient"
styled_df_a = df.style.background_gradient(subset=[0, 1], 
                                       low=0, high=0.5, 
                                       cmap="YlGnBu")

# Use method "bar"
styled_df_b = df.style.bar(subset=[2], align='mid', 
                       color=['#d65f5f', '#5fba7d'])

我随后将每个样式化的 table 导出到 html:

# Export styled table a to html
html = styled_df_a.render()
with open("df_a.html","w") as fp:
fp.write(html)

# Export styled table b to html
html = styled_df_b.render()
with open("df_b.html","w") as fp:
fp.write(html)  

因此,我有 2 个 html 渲染样式为 table。但是,我想将这 2 种方法组合成 1 种 html 样式 table,这样第 1-2 列具有 background_gradient 样式,第 3 列具有 bar 样式。

我试过这个:

styled_df_c = styled_df_a.style.bar(subset=[2], align='mid', 
                                color=['#d65f5f', '#5fba7d'])

由于以下错误,这不起作用:

AttributeError: 'Styler' object has no attribute 'style'

有没有办法通过其他方式做到这一点?我确实尝试使用 pandas 的 style.apply 方法进行试验,但出现了与上述类似的错误。

我根据此处的信息找到了解决方案:mode.com/example-gallery/python_dataframe_styling

与其尝试使用更多样式方法强制样式化对象,不如将多个样式方法同时传递到同一个数据框。请看下面:

# example data frame
df = pd.DataFrame(np.random.randn(15).reshape(5, 3))

# pass multiple style methods to same  data frame
styled_df = (df.style
             .background_gradient(subset=[0, 1], # background_gradient method
                                  low=0, high=0.5,
                                  cmap="YlGnBu")
             .bar(subset=[2], align='mid',       # bar method
                  color=['#d65f5f', '#5fba7d']))

# Export "styled_df" to html
html = styled_df.hide_index().render()
with open("html_c.html","w") as fp:
   fp.write(html)