如何在pandas导出Excel时跳过对inf值的背景渐变着色?
解决方案
pandas的Styler.background_gradient默认会把inf/-inf识别为极值参与着色计算,所以会被染成渐变的最深色,你可以通过以下两种方法解决:
方案1:单独为inf值自定义样式(优先推荐)
先叠加背景渐变样式,再用applymap给inf值单独设置更高优先级的样式,会直接覆盖原有渐变着色:
import numpy as np import seaborn as sns cr = sns.light_palette("green", as_cmap=True) styler = data.style # 自定义inf值的样式,这里设为白色背景,可自行修改颜色值 def set_inf_style(val): if np.isinf(val): return "background-color: #ffffff" return "" # 注意先应用渐变,再应用inf样式,后定义的样式优先级更高 styler = styler.background_gradient( cmap=cr, subset=data.columns.get_loc_level('value1', level=1)[0] ).applymap(set_inf_style, subset=data.columns.get_loc_level('value1', level=1)[0]) styler.to_excel(writer, sheet_name=name)
方案2:限制渐变的计算范围
如果不需要自定义inf样式,仅希望inf不参与渐变计算,可手动指定渐变的上下限,把inf排除在外:
import numpy as np import seaborn as sns cr = sns.light_palette("green", as_cmap=True) styler = data.style # 先提取有效数值(过滤inf)的最大最小值作为渐变范围 value_cols = data.columns.get_loc_level('value1', level=1)[0] valid_values = data[value_cols].replace([np.inf, -np.inf], np.nan) vmin = valid_values.min().min() vmax = valid_values.max().max() styler = styler.background_gradient( cmap=cr, subset=value_cols, vmin=vmin, vmax=vmax ) styler.to_excel(writer, sheet_name=name)
超出vmin/vmax范围的数值(包括inf)不会应用渐变颜色,默认显示为白色背景。
内容的提问来源于stack exchange,提问作者project.py
相关产品推荐
相关产品推荐

