Jupyter Notebook中Pandas背景渐变样式不显示问题解决
Pandas Style Background Gradient Not Working in Jupyter Notebook (Fixed!)
最近在Jupyter Notebook里折腾Pandas样式的时候踩了个坑,分享给大家避避坑:我尝试给DataFrame添加背景渐变提升可读性,跟着文档示例写了代码后,表格始终只显示普通样式,背景颜色完全不生效。试过用display()、print()调用样式对象,还换了好几种colormap,都没效果。不过奇怪的是,用applymap()设置字体颜色的功能倒是正常工作。
有问题的代码
import seaborn as sns import pandas as pd cm = sns.light_palette('green', as_cmap=True) df_res = pd.DataFrame(index =['foo','bar'],columns = ['Value 1','Value 2','Value 3']) df_res.loc['foo'] = [-.5*100, .3,.2] df_res.loc['bar'] = [.3*100, .6,.9] df_res.style.background_gradient(cmap=cm)
正常工作的applymap代码
def color_negative_red(val): """ Takes a scalar and returns a string with the css property `'color: red'` for negative strings, black otherwise. """ color = 'red' if val < 0 else 'black' return 'color: %s' % color df_res.style.applymap(color_negative_red)
问题原因与解决方案
折腾了半天终于找到根源:Pandas默认会把空DataFrame的元素类型初始化为object,而background_gradient()需要数值类型(比如float)才能正常计算渐变颜色。
只需要在初始化DataFrame的时候加上.astype('float'),强制把数据类型转为浮点型,就能让背景渐变正常生效了:
import seaborn as sns import pandas as pd cm = sns.light_palette('green', as_cmap=True) # 关键改动:添加.astype('float')确保数值类型 df_res = pd.DataFrame(index =['foo','bar'],columns = ['Value 1','Value 2','Value 3']).astype('float') df_res.loc['foo'] = [-.5*100, .3,.2] df_res.loc['bar'] = [.3*100, .6,.9] df_res.style.background_gradient(cmap=cm)
内容的提问来源于stack exchange,提问作者emilaz
相关产品推荐
相关产品推荐

