📃 参考文档:https://www.geeksforgeeks.org/set-pandas-dataframe-background-color-and-font-color-in-python/ 📃 参考文档:http://www.zzvips.com/article/84604.html

使用 Pandas 进行数据分析时,很多时候我们希望能够对 DataFrame 中结果进行高亮,从而方便我们快速地挖掘出一些有用的信息,通常需要高亮场景有以下几种:

  1. 在 Jupyter Notebook 中高亮
  • 高亮单元格背景和文字颜色
  • 添加色阶
  • 高亮最大、最小、空值单元格
  • 根据过滤条件进行高亮
  • 高亮文本列中关键词
  1. 导出 Excel 文件内容时高亮
  • 高亮单元格背景和文字颜色
  • 添加色阶
  • 高亮最大、最小、空值单元格
  • 根据过滤条件进行高亮
  • 高亮文本列中关键词

关于对导出 Excel 文件内容进行高亮,如果不是周期性的任务,我个人觉得使用 Python 来做这件事情,并没有特别大的意义,反而直接使用 Excel 原生操作更方便些,但如果每天需要生成指定样式的 Excel 文件,如何使用 Pandas 来对输出内容进行高亮还是很有必要做一个详细讲解的。

1、Jupyter Notebook

1.1 设置单元格的背景色和字体颜色

  1. import pandas as pd
  2. import numpy as np
  3. # Seeding random data from numpy
  4. np.random.seed(24)
  5. # Making the DatFrame
  6. df = pd.DataFrame({'A': np.linspace(1, 10, 10)})
  7. df = pd.concat([df, pd.DataFrame(np.random.randn(10, 4), columns=list('BCDE'))], axis=1)
  8. # DataFrame without any styling
  9. style = {'background-color': 'green', 'color': 'yellow'}
  10. df.style.set_properties(**style)

image.png

1.2 高亮最大、最小、空值单元格

  1. df.iloc[0, 3] = np.nan
  2. df.iloc[2, 3] = np.nan
  3. df.iloc[4, 2] = np.nan
  4. df.iloc[7, 4] = np.nan
  5. # Highlight the NaN values in DataFrame
  6. df.style.highlight_null(null_color='red')

image.png

  1. # Highlight the Max values in each column
  2. df.style.highlight_max(axis=0)

image.png

  1. # Highlight the Min values in each column
  2. df.style.highlight_min(axis=0)

image.png

1.3 根据过滤条件进行高亮

  1. def color_positive_green(val):
  2. """
  3. Takes a scalar and returns a string with
  4. the css property `'color: green'` for positive
  5. strings, black otherwise.
  6. """
  7. if val > 0:
  8. color = 'green'
  9. else:
  10. color = 'black'
  11. return 'color: %s' % color
  12. df.style.applymap(color_positive_green)

image.png

1.4 添加色阶

  1. df.fillna(0).style.background_gradient()

image.png :::warning 💡 background_gradient 还提供了一个 subset 参数,用于给指定列添加色阶
💡 使用这个方法同样可以使导出的 Excel 文件也具备色阶样式 :::

1.5 结合Seaborn来使用

  1. import seaborn as sns
  2. # Declaring the cm variable by the
  3. # color palette from seaborn
  4. cm = sns.light_palette("green", as_cmap=True)
  5. # Visualizing the DataFrame with set precision
  6. df.fillna(0).style.background_gradient(cmap=cm).set_precision(2)

image.png

1.6 高亮文本

这是通过终端的方式来进行关键词的高亮,但是显示只能以 Series 方式才可以正确显示,DataFrame 的话则不可以。

  1. def highlight_words(series, hl_words):
  2. for hlw in hl_words:
  3. series = series.str.replace(hlw, '\033[0;31m' + hlw + '\033[0m')
  4. return series
  5. t = highlight_words(df["text"], hl_words=["on", "two"])

1.7 CSSSelector方式

我们还可以借用 CSSSelector 来给我们的 DataFrame 进行着色。

  1. df.style.set_table_styles([{'selector': 'td:nth-child(7)', 'props': [('color', 'yellow')]}])

image.png