熱線電話:13121318867

登錄
首頁大數據時代pandas也能修改樣式?快速給你的數據換個Style!
pandas也能修改樣式?快速給你的數據換個Style!
2020-07-14
收藏

Pandas是一款很強大的Python庫,具有很多方便的功能,今天小編就給大家分享用Pandas修改樣式。

以下內容轉載于早起Python微信公眾號。

作者:劉早起

文章來源:早起Python

前言

在之前的很多文章中我們都說過,Pandas與openpyxl有一個很大的區別就是openpyxl可以進行豐富的樣式調整,但其實在Pandas中每一個DataFrame都有一個Style屬性,我們可以通過修改該屬性來給數據添加一些基本的樣式。

使用說明

我們可以編寫樣式函數,并使用CSS來控制不同的樣式效果,通過修改Styler對象的屬性,將樣式傳遞給DataFrame,主要有兩種傳遞方式

Styler.applymap:逐元素

Styler.apply:列/行/表方式

Styler.applymap通過DataFrame逐個元素地工作。Styler.apply根據axis參數,按列使用axis=0.按行使用axis=1.以及axis=None作用于整個表。所以若使用Styler.applymap,我們的函數應返回帶有CSS屬性-值對的單個字符串。若使用Styler.apply,我們的函數應返回具有相同形狀的SeriesDataFrame,其中每個值都是具有CSS屬性值對的字符串。

不會CSS?沒關系,作為調包俠的我們大多是改改HTML顏色代碼即可完成樣式修改,下面看一些示例。

一些例子

基本樣式

首先我們創建一組沒有任何樣式的數據

我們之前說過,DataFrame是有style屬性的,所以在沒有做任何修改的情況下,使用df.style應該和上圖一樣

現在讓我們編寫一個簡單的樣式函數,該函數可以將負數變為紅色,使正數保持黑色。

def color_negative_red(val):

color = 'red' if val < 0 else 'black'

return 'color: %s' % color

現在來應用這段函數(思考Excel如何實現)

現在如果我們想突出顯示每列中的最大值,需要重新定義一個函數

def highlight_max(s):

is_max = s == s.max()

return ['background-color: yellow' if v else '' for v in is_max]

因為之前我們是以元素為單位判斷,所以使用的是.applymap,所以現在我們應對列進行.apply操作

現在可以使用

df.style.applymap(color_negative_red).apply(highlight_max)

來混合修改樣式或使用.\實現

當然我們也可以通過修改樣式函數并使用.apply來高亮整個DataFrame的最大值,

切片

當然我們也可以使用subset通過切片來完成對指定列進行樣式修改,比如高亮部分列的最大值

df.style.apply(highlight_max, subset=['B', 'C', 'D'])

對于行和列切片,可以使用我們熟悉的.loc,不過目前僅支持基于標簽的切片,不支持位置切片。

格式化輸出

我們也可以使用Styler.format來快速格式化輸出,比如將小數格式化為百分數

也支持使用字典或lambda表達式來更靈活的使用

當然是支持和之前的樣式結合使用

內置樣式

開發者們為了盡可能的讓作為調包俠的我們使用起來更方便,已經內置了很多寫好的樣式,拿走就用,比如將空值設置為紅色

或是結合seaborn使用熱力圖

現在我們就可以通過修改Styler.background_gradient來輕松的修改顏色等樣式

最后我們可以將數據修改為條形圖的樣式,這也是我最喜歡的一個功能,能夠快速的看出數據的變化!

在最新的版本中可以進一步自定義條形圖:我們現在可以將df.style.bar以零或中點值為中心來快速觀察數據變化,并可以傳遞顏色[color_negative, color_positive],比如使用align='mid':

以上就是對Pandas中如何修改樣式的一個簡單介紹,更多的操作可以在官方文檔https://pandas.pydata.org/pandas-docs/stable/user_guide/style.html中找到與學習。

數據分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數據分析師資訊
更多

OK
客服在線
立即咨詢
日韩人妻系列无码专区视频,先锋高清无码,无码免费视欧非,国精产品一区一区三区无码
客服在線
立即咨詢