Pandas也能修改樣式?快速給你的數據換個Style!

前言

在之前的很多文章中我們都說過,Pandasopenpyxl有一個很大的區別就是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,我們的函數應返回具有相同形狀的Series或DataFrame,其中每個值都是具有CSS屬性值對的字符串。

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

一些例子

基本樣式

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

img

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

img

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

def color_negative_red(val):

    color = 'red' if val < 0 else 'black'
    return 'color: %s' % color

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

img

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

def highlight_max(s):

    is_max = s == s.max()
    return ['background-color: yellow' if v else '' for v in is_max]

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

img

現在可以使用

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

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

img

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

img

切片

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

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

img

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

格式化輸出

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

img

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

img

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

img

內置樣式

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

img

或是結合seaborn使用熱力圖

img

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

img

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

img

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

img

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章