?? 作者:韓信子@ShowMeAI
?? 資料分析?技能提升系列:https://www.showmeai.tech/tutorials/33
?? 資料分析實戰系列:https://www.showmeai.tech/tutorials/40
?? 本文地址:https://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:https://github.com/ShowMeAI-Hub
import pandas as pd
data = https://www.cnblogs.com/showmeai/p/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 高亮缺失值,
# 突出顯示空值
df_pivoted.style.highlight_null()
大家發現了,使用 .highlight_null 默認是以紅色突出顯示 nan 缺失值,不喜歡紅色?沒關系,顏色可以調!
我們可以使用自定義引數對對缺失值的文本和背景進行設定,比如 props='color:white;background-color:black' 可以設定背景色為黑色文本為白色,如下圖所示:
# 背景為黑色,文本為白色,突出顯示空值
df_pivoted.style.highlight_null(props='color:white;background-color:black')
通過高亮,我們可以很快在表中發現2018年 Product_H 沒有賣掉的資訊,
② 突出顯示最大值(或最小值)
要突出顯示每列中的最大值,我們可以使用 dataframe.style.highlight_max() 為最大值著色,最終結果如下圖所示,
# 背景為綠色,文本為白色,突出顯示每一列最大值
df_pivoted.style.highlight_max(props='color:white;background-color:green')
那如果我們想顯示的是每一行的最大值呢?我們可以通過設定引數 axis=1 來實作,如下圖所示,
# 背景為綠色,文本為白色,突出顯示每一行最大值
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 之間的數填充黃色底色,
# 背景為黃色,文本為黑色,突出顯示 100 到 200 之間的值
df_pivoted.style.highlight_between(left=100, right=200, props='color:black;background-color:yellow')
④ 繪制柱內條形圖
可視化圖表直觀又炫酷!我們可不可以把這種呈現引入到 Pandas 中呢?當然可以!!
以條形圖為例,通過 dataframe.style.bar() 可以創建條形圖,更直觀地顯示數值的大小,如下圖所示,紅色的柱子長度對應單元格內的數值大小,
# 繪制柱內內條形圖
df_pivoted.style.bar()
當然也可以自定義條形圖的顏色和大小!如下圖所示,設定了顏色和寬高等引數,
# 繪制柱內內條形圖
df_pivoted.style.bar(color='lightblue',height=70,width=70)
⑤ 使用顏色漸變突出顯示值
我們還可以用顏色漸變來突出顯示整個列,具體實作通過 dataframe.style.background_gradient() 完成,如下圖所示,在影像中,隨著值的增加,顏色會從紅色變為綠色,你可以設定 subset=None 將這個顯示效果應用于整個Dataframe,
# 為列設定顏色漸變值
df_pivoted.style.background_gradient(cmap='RdYlGn',subset=['Product_C'])
⑥ 組合顯示設定功能
是否可以在資料中同時突出顯示最小值、最大值和缺失值呢?可以!!
可以定義一個函式,該函式突出顯示列中的 min、max 和 nan 值,當前是對 Product_C 這一列進行了突出顯示,我們可以設定 subset=None來把它應用于整個Dataframe,
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
highlight_dataframe(df_pivoted, subset=['Product_C'])
參考文獻
- ?? 實戰資料集下載(百度網盤):公眾號『ShowMeAI研究中心』回復『實戰』,或者點擊 這里 獲取本文 [6] Pandas 使用 Styler API 設定多條件資料選擇&豐富的呈現樣式 『conditional formatting in pandas 資料集』
- ? ShowMeAI官方GitHub:https://github.com/ShowMeAI-Hub
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/501350.html
標籤:其他
上一篇:爆肝萬字,終于搞定這篇?神經網路搭建全全全流程!學不會你來找我~
下一篇:線段樹學習筆記(原洛谷文章)
