点击上方“Python爬虫与数据挖掘”,进行关注
回复“书籍”即可获赠Python从入门到进阶共10本电子书
今
日
鸡
汤
诸葛大名垂宇宙,宗臣遗像肃清高。
大家好,我是才哥。
本来这周不是加班周,但是毕竟项目赶进度,还是需要加班着,咱们更文又变得慢了起来。
最近有粉丝询问Pandas表格可视化
的一些问题,刚好前段时间也看过,那么就结合之前处理Excel
时的条件格式对着来看吧。
所以,今天咱们隆重介绍一下Excel条件格式
与Pandas的表格可视化
,走起!
目录:
1. 概述
2. 突出显示单元格
2.1. 高亮缺失值
2.2. 高亮最大值
2.3. 高亮最小值
2.4. 高亮区间值
2.5. 高亮分位数
3. 色阶(背景及文本渐变色)
3.1. 背景渐变色
3.2. 文本渐变色
4. 数据条
5. 数据格式化
6. 自定义格式函数
7. 其他
1. 概述
咱们先简单介绍一下什么是表格条件格式可视化,以常用的Excel为例说明。
在Excel菜单栏里,默认(选择)开始菜单,在中间部位有个条件格式控件,里面就是关于表格条件格式的方方面面。主要包含突出显示单元格规则
、最前/最后规则
、数据条
、色阶
、图标集
以及规则管理
等。
![f9f01350e1c3cbdb3b0ad66d02130988.png](https://i-blog.csdnimg.cn/blog_migrate/a8ccc66b6d34b7e5df4ba6285d0efdcc.png)
基于以上,我们其实可以通过函数方式进行多种条件的综合,让Excel表格可视化丰富多彩,比如以下截图展示的就是色阶效果!
![6f6e3da77498c140e39a8c96a4352fa2.png](https://i-blog.csdnimg.cn/blog_migrate/f83176a45957b2d732b8863609823052.png)
在上图中,我们对每列单独进行条件格式-色阶
设置,绿色->红色 代表数值从小到大,可以很直观的快速感受数值表现。
所谓 表格条件格式可视化,就是对表格的数据按照一定的条件进行可视化的展示(这里的可视化更多是指单元格背景色、字体颜色以及文本格式显示等)。
那么,Pandas作为表格化的数据处理工具,我们可以如何实现 表格条件格式可视化呢?!
大杀器:df.style
2. 突出显示单元格
在Excel条件格式中,突出显示单元格规则提供的是大于、小于、等于以及重复值等内置样式,不过在Pandas中这些需要通过函数方法来实现,我们放在后续介绍。这里介绍Pandas突出显示缺失值
、最大值
、最小值
、区间值
的函数方法以及Excel实现这些操作的自定义操作。
2.1. 高亮缺失值
df.style.highlight_null()
Signature:
df.style.highlight_null(
null_color: 'str' = 'red',
subset: 'Subset | None' = None,
props: 'str | None' = None,
) -> 'Styler'
Docstring:
Highlight missing values with a style.
null_color
用于指定高亮的背景色,默认是红色
subset
用于指定操作的列或行
props
用于突出显示CSS属性(后面案例中会涉及到)
![b72ddf36d7055657e7a75a20f4241e39.png](https://i-blog.csdnimg.cn/blog_migrate/657673ee9a32434f011e8f282493249e.png)
比如,我们可以指定高亮的背景色为橙色(颜色可以是英文名称)
![765c585ee76c0839e61b2919825ab6c4.png](https://i-blog.csdnimg.cn/blog_migrate/725035fd937c78851e2da51bc072a04f.png)
比如,我们可以指定高亮的背景色为紫红色(颜色可以是16进制)
![57f3a7f7b23b0b402999914fd5b75e6e.png](https://i-blog.csdnimg.cn/blog_migrate/740a1a207f26f4ea61bf15d732503ec7.png)
2.2. 高亮最大值
df.style.highlight_max()
Signature:
df.style.highlight_max(
subset: 'Subset | None' = None,
color: 'str' = 'yellow',
axis: 'Axis | None' = 0,
props: 'str | None' = None,
) -> 'Styler'
Docstring:
Highlight the maximum with a style.
subset
用于指定操作的列或行
color
用于指定颜色,默认是黄色
axis
用于指定行最大、列最大或全部,默认是列方向最大
![e2bb12ebb08e8c58542fd64706a01cf1.png](https://i-blog.csdnimg.cn/blog_migrate/ea9f2271c68935511c12344c396239dc.png)
这里我们发现对于中文也有列最大高亮,至于为啥是蒙古其实我也不清楚,为了避免出现这种情况,有两种方法:①将这一列设置为索引(这里不做演示),②采用subset
指定
![53121aa4eb6f2d60b7b6fe1375d74902.png](https://i-blog.csdnimg.cn/blog_migrate/1367c152d001661722c8ebb8ef89639b.png)
指定颜色为灰色
![b124a9fda24633fe65bd72e9ce5efc32.png](https://i-blog.csdnimg.cn/blog_migrate/ea693f3628c23436bc1beb738d46f588.png)
显示全部最大值
![8c6842b38649cdb4ff1faed2f611d641.png](https://i-blog.csdnimg.cn/blog_migrate/5f7d2f2c6fb539e55bb2a79765589dfb.png)
那么,Excel如何显示最大值呢?这里我们以显示全部最大值为例展开介绍,逻辑如下:
通过函数MAX获取数据区域的最大值
然后编辑格式满足单元格值等于这个最大值即可
操作为:选中数据区域,进行条件格式设置
->编辑格式规则
具体规则如下图:
![f3b386f17e1e8ec834585f7d3266a908.png](https://i-blog.csdnimg.cn/blog_migrate/1d07e090218dcff41888e791cc79f733.png)
我们就可以得到想要的效果:
![ebbf45a363d1405b43f00b442ff35196.png](https://i-blog.csdnimg.cn/blog_migrate/a25f4b739abf706b6f3a022dce7045d4.png)
同样的道理,我们可以根据需求高亮列或行的最大值、最小值等
2.3. 高亮最小值
df.style.highlight_min()
参数基本同高亮最大值,这里不再赘述,看案例
![e3e0b0db3f6f092073e52fed5a5b8396.png](https://i-blog.csdnimg.cn/blog_migrate/2ef5c96c17db101f7b6aefcf4f7e5a2e.png)
链式调用 最大最小值高亮
![b83231b2bd244d382c24e7c745ec0b9b.png](https://i-blog.csdnimg.cn/blog_migrate/00a39d355e2a013a4eebed450696e7f9.png)
2.4. 高亮区间值
df.style.highlight_between
Signature:
df.style.highlight_between(
subset: 'Subset | None' = None,
color: 'str' = 'yellow',
axis: 'Axis | None' = 0,
left: 'Scalar | Sequence | None' = None,
right: 'Scalar | Sequence | None' = None,
inclusive: 'str' = 'both',
props: 'str | None' = None,
) -> 'Styler'
Docstring:
Highlight a defined range with a style.
subset
用于指定操作的列或行
color
用于指定颜色,默认是黄色
axis
用于指定行、列或全部,如果left或right作为序列给出,则应用于这些序列的边界
left
用于指定区间最小值
right
用于指定区间最大值
inclusive
用于确定是否左右闭包,可选'both', 'neither', 'left', 'right'
props
用于突出显示CSS属性
高亮数量在[20, 30]
的单元格
![22f347c53815f260aea4d18288376281.png](https://i-blog.csdnimg.cn/blog_migrate/ed1a0d8025d0ae8aa4b9abc903d2702b.png)
props
用于突出显示CSS属性,案例中我们将待高亮的部分显示为字体颜色-白色,背景色-紫色
![56fbdc48816148cebd899852440443ba.png](https://i-blog.csdnimg.cn/blog_migrate/6b1320754e3f3066e0358e8be55723fa.png)
金牌数区间[20, 30]
、银牌数区间[10, 20]
、铜牌数区间[5, 10]
![0b9299ad23317606357b1a9fbe2fa25b.png](https://i-blog.csdnimg.cn/blog_migrate/f2ad723f1fe7ffd4b7516254d7470a8c.png)
2.5. 高亮分位数
df.style.highlight_quantile()
Signature:
df.style.highlight_quantile(
subset: 'Subset | None' = None,
color: 'str' = 'yellow',
axis: 'Axis | None' = 0,
q_left: 'float' = 0.0,
q_right: 'float' = 1.0,
interpolation: 'str' = 'linear',
inclusive: 'str' = 'both',
props: 'str | None' = None,
) -> 'Styler'
Docstring:
Highlight values defined by a quantile with a style.
subset
用于指定操作的列或行
color
用于指定颜色,默认是黄色
axis
用于指定行、列或全部
q_left
用于指定分位数左边界,默认是0
q_right
用于指定分位数右边界,默认是1
inclusive
用于确定是否左右闭包,可选'both', 'neither', 'left', 'right'
props
用于突出显示CSS属性
比如,高亮各列奖牌数前15%的值
![f4e6db79aeeb8a1bc69d330c3d794e17.png](https://i-blog.csdnimg.cn/blog_migrate/4082c1ab288fa746c5ebdbc8c4d33ba0.png)
3. 色阶(背景及文本渐变色)
色阶部分包含背景渐变色和文本渐变色
3.1. 背景渐变色
在Excel中,直接通过条件格式->色阶
操作即可选择想要的背景渐变色效果
![8116b9b7a466f31e2d99ede154cf4781.png](https://i-blog.csdnimg.cn/blog_migrate/492731a102c1b4c7db5475ae533fedae.png)
而在Pandas中,我们可以通过df.style.background_gradient()
进行背景渐变色的设置。
Signature:
df.style.background_gradient(
cmap='PuBu',
low: 'float' = 0,
high: 'float' = 0,
axis: 'Axis | None' = 0,
subset: 'Subset | None' = None,
text_color_threshold: 'float' = 0.408,
vmin: 'float | None' = None,
vmax: 'float | None' = None,
gmap: 'Sequence | None' = None,
) -> 'Styler'
Docstring:
Color the background in a gradient style.
cmap
用于指定matplotlib色条
low
和high
用于指定最小最大值颜色边界,区间[0, 1]
axis
用于指定行、列或全部,默认是列方向
subset
用于指定操作的列或行
text_color_threshold
用于指定文本颜色亮度,区间[0, 1]
vmin
和vmax
用于指定与cmap最小最大值对应的单元格最小最大值
![26866dac2ac2f0307c774c3ca3784a29.png](https://i-blog.csdnimg.cn/blog_migrate/08e61e5236874d3edb9043efa8e93f68.png)
low
和high
用于指定最小最大值颜色边界,区间[0, 1]
![d987ca0e6ed9e53191ff0c46c5eca4fc.png](https://i-blog.csdnimg.cn/blog_migrate/39de1e3fb6be48fef645d9dde304f34f.png)
cmap
用于指定matplotlib色条,采用seaborn美化样式
![0699973f573283a65182f4c418db96af.png](https://i-blog.csdnimg.cn/blog_migrate/c249a24a80510a4762e2700ac7a824c2.png)
text_color_threshold
用于指定文本颜色亮度,区间[0, 1]
![7947b63babfd2ee54c32fd539b8666b5.png](https://i-blog.csdnimg.cn/blog_migrate/38bfedda858d3e0dc4b388198aed1e9a.png)
vmin
和vmax
用于指定与cmap最小最大值对应的单元格最小最大值(10以下同色,70以上同色)
![c28781986cdc88a904f4b8d6bf149aa3.png](https://i-blog.csdnimg.cn/blog_migrate/b33ea083083f5ebb3dc48c9f5b21bfc7.png)
我们可以看到以上对于缺失值来说,其背景色是黑色,我们可以通过链式方法和高亮缺失值对缺失值背景色进行修改
![05098486af5fab74a760a17a980b6d4c.png](https://i-blog.csdnimg.cn/blog_migrate/a30a1e118d833ac97ba49cd0bd3ee8ea.png)
3.2. 文本渐变色
文本渐变色顾名思义就是对单元格的文本进行颜色渐变,可以通过df.style.text_gradient()
来操作,其参数和背景渐变色基本一致。
![11534a2e09473bbc714f341a0af61350.png](https://i-blog.csdnimg.cn/blog_migrate/61325e9fcc7859ec8dc3fa78caf08435.png)
4. 数据条
在Excel中,直接通过条件格式->数据条
操作即可选择想要的数据条效果
![1617993fa6f7b81c7190ae7b52c7dee2.png](https://i-blog.csdnimg.cn/blog_migrate/68acc58bf1c8cf145be2d8618c6f68c0.png)
而在Pandas中,我们可以通过 df.style.bar()
来进行数据条绘制
Signature:
df.style.bar(
subset: 'Subset | None' = None,
axis: 'Axis | None' = 0,
color='#d65f5f',
width: 'float' = 100,
align: 'str' = 'left',
vmin: 'float | None' = None,
vmax: 'float | None' = None,
) -> 'Styler'
Docstring:
Draw bar chart in the cell backgrounds.
subset
用于指定操作的列或行
axis
用于指定行、列或全部,默认是列方向
color
用于指定数据条颜色
width
用于指定数据条长度,默认是100,区间[0, 100]
vmin
和vmax
用于指定与数据条最小最大值对应的单元格最小最大值
align
数据条与单元格对齐方式,默认是left左对齐,还有zero居中和mid位于(max-min)/2
比如,奖牌数(不算总的)最低0最高40+颜色为橙色+居中展示,金牌差数据条长度为50(也就是单元格一半的长度)、银牌差mid对齐+数据条为单元格一半长度+正负显示不同颜色
![94461ade7b1efb35870dd1ecdef7951a.png](https://i-blog.csdnimg.cn/blog_migrate/d8ec76863ab89f06c387d9218c4b9eb8.png)
5. 数据格式化
调整数据格式用到df.style.format()
Signature:
df.style.format(
formatter: 'ExtFormatter | None' = None,
subset: 'Subset | None' = None,
na_rep: 'str | None' = None,
precision: 'int | None' = None,
decimal: 'str' = '.',
thousands: 'str | None' = None,
escape: 'str | None' = None,
) -> 'StylerRenderer'
Docstring:
Format the text display value of cells.
formatter
显示格式
subset
用于指定操作的列或行
na_rep
用于指定缺失值的格式
precision
用于指定浮点位数
decimal
用于用作浮点数、复数和整数的十进制分隔符的字符,默认是.
thousands
用作浮点数、复数和整数的千位分隔符的字符
escape
用于特殊格式输出(如html、latex等,这里不做展开,可参考官网)比如,我们给数据加上单位
枚
,缺失值显示为无
![0c1818ecc550ffbbe6eab16c0d8db1bf.png](https://i-blog.csdnimg.cn/blog_migrate/4c40b5e6ca61e21dda74584ab3b47a22.png)
设置小数点位数为0
![8c0fd5fefa81cae2b83e1f13bdbe683e.png](https://i-blog.csdnimg.cn/blog_migrate/f0298fc6715910a2c4b7f4cc8dd6f5c6.png)
指定列进行格式化
![1698dc7f932d5619dc3343e6b1f6fd8d.png](https://i-blog.csdnimg.cn/blog_migrate/3666478605b7cc436d2320d6f8fb6f18.png)
分别对指定列进行单独格式化
![faaadedf19a3fa36f7218c1160da00ba.png](https://i-blog.csdnimg.cn/blog_migrate/065e4c717cd9253dcc857ca5e971789f.png)
6. 自定义格式函数
通过传递样式函数来自定义格式:
applymap()
(elementwise):接受一个函数,它接受一个值并返回一个带有 CSS 属性值对的字符串。
apply()
(column-/ row- /table-wise): 接受一个函数,它接受一个 Series 或 DataFrame 并返回一个具有相同形状的 Series、DataFrame 或 numpy 数组,其中每个元素都是一个带有 CSS 属性的字符串-值对。此方法根据axis
关键字参数一次传递一个或整个表的 DataFrame 的每一列或行。对于按列使用axis=0
、按行使用axis=1
,以及一次性使用整个表axis=None
。
比如,我们定义一个函数,如果金牌数<银牌数,则高亮金牌数这一列对应的值
![11a4228dd5785a91837e2cee4894a5ea.png](https://i-blog.csdnimg.cn/blog_migrate/0336a1d4a199052b90486729390f45a0.png)
比如,我们还可以定义函数,如果金牌数<银牌数,则这一行数据都高亮
![71425bc7db1cb1455d0df1d099823950.png](https://i-blog.csdnimg.cn/blog_migrate/ba442d67e6cb7ec86270c6091fd55a9b.png)
又或者,我们可以根据不同的比值对每行进行不同的高亮
![a429be56dfdedff23ba847178bb255b9.png](https://i-blog.csdnimg.cn/blog_migrate/2551091be0b719a8ba42440e1effa57c.png)
关于以上函数的写法,我们还可以调用numpy的where
和repeat
方法进行优化,如:
![d040bac689d1059a01d0df0323b25470.png](https://i-blog.csdnimg.cn/blog_migrate/e9de0be16876b81abd10ddf9e654efdc.png)
7. 其他
还有一些小操作,比如添加标题、隐藏索引、隐藏指定列等等
添加标题
![01d62e0173b3abc6b0bc59490663841c.png](https://i-blog.csdnimg.cn/blog_migrate/b12db2a7b10292c036cd69511eabed04.png)
隐藏索引
![25b52d5b2de076aa00dc6d9c66ef66b0.png](https://i-blog.csdnimg.cn/blog_migrate/134a5893fbb2e286276c5b60f9ea825e.png)
隐藏指定列
![6cc4f02ecc93e78b4fa548c047d11704.png](https://i-blog.csdnimg.cn/blog_migrate/701c4e1a822c3e2752fb0d124dbc3b87.png)
设置属性
如果一些单元格属性和单元格值无关,我们可以通过df.style.set_properties()
来进行定制化操作,比如:背景色-黑色
,字体颜色-草绿色
,边框颜色-白色
。(css样式)
![5c9aee6266f75b416b669d70563c7ec9.png](https://i-blog.csdnimg.cn/blog_migrate/2070e77952cb0d5dad0dd831bbf5d52f.png)
选中放大
![1f5d2cb14a8dbb2c47526dc9f162a6eb.png](https://i-blog.csdnimg.cn/blog_migrate/afc596e723f8b9810d598ba4717c576f.png)
鼠标选择单元格会有放大效果
![ed254844f77ad4c12e2cf89f2dd0955c.gif](https://i-blog.csdnimg.cn/blog_migrate/6591ca369cb1d28888976b1d9d21aeb8.gif)
导出Excel
就直接to_excel
就行了,dfs = df.style.xxx
,然后dfs.to_excel()
![7e8ed7a057b11f8d6c24773c3658d96d.png](https://i-blog.csdnimg.cn/blog_migrate/f54a97c6f60cdad4cad13e952c99d562.png)
导出html
![ed0f87e1f8c9d3110cf8a1a1dbf94f83.png](https://i-blog.csdnimg.cn/blog_migrate/d1c24a65e218a9cecbe34c3e82f72423.png)
以上就是本次全部内容,大家感兴趣的话可以自己演示一遍熟悉熟悉,又或者想想日常工作中的一些条件格式需求,然后通过Pandas演示出来效果看看。
小伙伴们,快快用实践一下吧!如果在学习过程中,有遇到任何问题,欢迎加我好友,我拉你进Python学习交流群共同探讨学习。
------------------- End -------------------
往期精彩文章推荐:
欢迎大家点赞,留言,转发,转载,感谢大家的相伴与支持
想加入Python学习群请在后台回复【入群】
万水千山总是情,点个【在看】行不行
/今日留言主题/
随便说一两句吧~~