羡慕 Excel 的高级选择与文本框颜色呈现?Pandas 也可以拥有!! ⛵
highlight: a11y-dark
携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第15天,点击查看活动详情
- 💡 作者:韩信子@ShowMeAI
- 📘 数据分析 ◉ 技能提升系列:http://www.showmeai.tech/tutorials/33
- 📘 数据分析实战系列:http://www.showmeai.tech/tutorials/40
- 📘 本文地址:http://www.showmeai.tech/article-detail/293
- 📢 声明:版权所有,转载请联系平台与作者并注明出处
- 📢 收藏ShowMeAI查看更多精彩内容
用过 Excel 的数据分析师,对 Excel 的『条件选择』与『格式呈现』功能大都印象深刻。下方动图演示了 Excel『数据选择&底色填充高亮』功能。如果我们需要『选择大于100的所有产品取值并对单元格填充红色』,直接如下图所示,在『条件格式』中选择『突出显示单元格规则』即可进行设置。
习惯用 Python 进行数据分析挖掘的我们,是否可以完成相同的高级显示呢?答案是,可以的!!
在本文中 ShowMeAI 将带大家在 Pandas Dataframe 中完成多条件数据选择及各种呈现样式的设置。
💡 案例&背景
我们从一个电商销售的案例背景讲起,下图的数据透视表(pandas pivot table)显示了 2016 年至 2022 年不同产品的总销售额。数据可以在ShowMeAI的百度网盘获取,数据读取与处理代码如下:
🏆 实战数据集下载(百度网盘):公众号『ShowMeAI研究中心』回复『实战』,或者点击 这里 获取本文 [6] Pandas 使用 Styler API 设置多条件数据选择&丰富的呈现样式 『conditional formatting in pandas 数据集』
⭐ ShowMeAI官方GitHub:http://github.com/ShowMeAI-Hub
python
import pandas as pd
data = pd.read_excel('data.xlsx')
df_pivoted = pd.pivot_table(data, index='Year')
💰 你能找出 2016 年最畅销的产品吗?
- 你可能很快能找到答案 Product_B,总销售额为 169,但我们仅通过透视表去定位结果非常不方便。
- Pandas 可以很便捷地用条件语句去找到结果,但在原表对应还是不容易。
💰 如果我们为每年最畅销的产品上色呢,如下图所示用底色突出显示之后,回答上面的问题是不是容易多了?
接下来演示在 Pandas 中完成这个操作的详细步骤!
💡 内容覆盖
本篇后续内容覆盖以下高级功能:
- 突出缺失值
- 突出显示每行/列中的最大值(或最小值)
- 突出显示范围内的值
- 绘制柱内条形图
- 使用颜色渐变突出显示值
- 组合显示设置功能
注意:强烈建议大家使用最新版本的 Pandas。你可以通过命令行命令
pip install --upgrade pandas
获取或升级 Pandas 为最新稳定版本。
① 突出缺失值
在 Pandas Dataframe 中,我们可以使用 dataframe.style.highlight_null()
为空值着色。下图中我们为数据透视表 df_pivoted
高亮缺失值。
```python
突出显示空值
df_pivoted.style.highlight_null() ```
大家发现了,使用 .highlight_null
默认是以红色突出显示 nan 缺失值。不喜欢红色?没关系,颜色可以调!
我们可以使用自定义参数对对缺失值的文本和背景进行设定,比如 props='color:white;background-color:black'
可以设定背景色为黑色文本为白色,如下图所示:
```python
背景为黑色,文本为白色,突出显示空值
df_pivoted.style.highlight_null(props='color:white;background-color:black') ```
通过高亮,我们可以很快在表中发现2018年 Product_H 没有卖掉的信息。
② 突出显示最大值(或最小值)
要突出显示每列中的最大值,我们可以使用 dataframe.style.highlight_max()
为最大值着色,最终结果如下图所示。
```python
背景为绿色,文本为白色,突出显示每一列最大值
df_pivoted.style.highlight_max(props='color:white;background-color:green') ```
那如果我们想显示的是每一行的最大值呢?我们可以通过设定参数 axis=1
来实现,如下图所示。
```python
背景为绿色,文本为白色,突出显示每一行最大值
df_pivoted.style.highlight_max(props='color:white;background-color:green', axis=1) ```
注意:同样可以使用方法
dataframe.style.highlight_min()
使用适当的参数为行/列中的最小值着色。
③ 突出显示范围内的值
假设我们要突出显示 100 到 200 之间的值,这个怎么实现呢?我们可以通过 dataframe.style.highlight_between(left, right)
来实现这个功能。如下图是对 100 到 200 之间的数填充黄色底色。
```python
背景为黄色,文本为黑色,突出显示 100 到 200 之间的值
df_pivoted.style.highlight_between(left=100, right=200, props='color:black;background-color:yellow') ```
④ 绘制柱内条形图
可视化图表直观又炫酷!我们可不可以把这种呈现引入到 Pandas 中呢?当然可以!!
以条形图为例。通过 dataframe.style.bar()
可以创建条形图,更直观地显示数值的大小,如下图所示,红色的柱子长度对应单元格内的数值大小。
```python
绘制柱内内条形图
df_pivoted.style.bar() ```
当然也可以自定义条形图的颜色和大小!如下图所示,设定了颜色和宽高等参数。
```python
绘制柱内内条形图
df_pivoted.style.bar(color='lightblue',height=70,width=70) ```
⑤ 使用颜色渐变突出显示值
我们还可以用颜色渐变来突出显示整个列,具体实现通过 dataframe.style.background_gradient()
完成。如下图所示,在图像中,随着值的增加,颜色会从红色变为绿色。你可以设置 subset=None
将这个显示效果应用于整个Dataframe。
```python
为列设置颜色渐变值
df_pivoted.style.background_gradient(cmap='RdYlGn',subset=['Product_C']) ```
⑥ 组合显示设置功能
是否可以在数据中同时突出显示最小值、最大值和缺失值呢?可以!!
可以定义一个函数,该函数突出显示列中的 min、max 和 nan 值。当前是对 Product_C
这一列进行了突出显示,我们可以设置 subset=None
来把它应用于整个Dataframe。
```python def highlight_dataframe(df, subset= None):
df = df.style.highlight_max(props='color:white;background-color:green', subset=subset) \
.highlight_min(props='color:white;background-color:red', subset=subset) \
.highlight_null(props='color:white;background-color:black', subset=subset)
return df
```
python
highlight_dataframe(df_pivoted, subset=['Product_C'])
参考文献
- 🏆 实战数据集下载(百度网盘):公众号『ShowMeAI研究中心』回复『实战』,或者点击 这里 获取本文 [6] Pandas 使用 Styler API 设置多条件数据选择&丰富的呈现样式 『conditional formatting in pandas 数据集』
- ⭐ ShowMeAI官方GitHub:http://github.com/ShowMeAI-Hub
- 感谢飞书放过幕布!100个GPT-4实战案例;GPT-4免费平替Poe;AI绘画新手指南之SD篇;new Bing靠谱教程 | ShowMeAI日报
- whylogs工具库的工业实践!机器学习模型流程与效果监控 ⛵
- 脉脉疯传!2023年程序员生存指南;多款prompt效率加倍工具;提示工程师最全秘籍;AI裁员正在发生 | ShowMeAI日报
- 中国风?古典系?AI中文绘图创作尝鲜!⛵
- Python中内置数据库!SQLite使用指南!
- Pandas中你一定要掌握的时间序列相关高级功能
- 数据科学家赚多少?数据全分析与可视化 ⛵
- 交互式仪表板!Python轻松完成!⛵
- ChatGPT!我是你的破壁人;比尔·盖茨不看好Web3与元宇宙;FIFA押中4届世界杯冠军;GitHub今日热榜 | ShowMeAI资讯日报
- ChatGPT要收费了;华尔街大裁员;阿里2023十大科技趋势;小红书元宇宙虚拟服饰被吐槽;GitHub今日热榜 | ShowMeAI资讯日报
- AI创业时代!这9个方向有钱途;AIGC再添霸榜应用Lensa;美团SemEval2022冠军方法分享;医学图像处理工具箱… | ShowMeAI资讯日报
- 嘘!P站数据分析年报;各省市疫情感染进度条;爱奇艺推出元宇宙App;You推出AI聊天机器人;GitHub今日热榜 | ShowMeAI资讯日报
- 美国公司裁员潮时间线◉科技寒冬可视化;3份报告回顾中国开发者2022;自动驾驶下半场,谁会冲出重围 | ShowMeAI每周通讯 #005-01.07
- 副业月入过万?数据有话说;扫地机器人发展到哪步了;疫情后要不要重返办公室;淘宝元宇宙直播间;GitHub今日热榜 | ShowMeAI资讯日报
- 大战谷歌!微软Bing引入ChatGPT;羊了个羊40万年薪招研发;Debian彻底移除Python2;GitHub今日热榜 | ShowMeAI资讯日报
- 酸了!乐视工作制改为四天半;高通新年裁员;AI绘画公司开始倒闭;网易入股张艺谋元宇宙公司;GitHub今日热榜 | ShowMeAI资讯日报
- 要么干要么滚!推特开始裁员了;深度学习产品应用·随书代码;可分离各种乐器音源的工具包;Transformer教程;前沿论文 | ShowMeAI资讯日报
- 真实世界的人工智能应用落地——OpenAI篇 ⛵
- 阳过→阳康,数据里的时代侧影;谷歌慌了!看各公司如何应对ChatGPT;两份优质AI年报;本周技术高光时刻 | ShowMeAI每周通讯 #003-12.24
- 用魔法打败魔法!这件毛衣让摄像头看不到你;两款酷炫的AI写作软件;快如闪电的B站下载工具;基于扩散模型的蛋白质设计 | ShowMeAI资讯日报