【pandas小技巧】--DataFrame的顯示樣式

2023-08-25 12:01:34

上一篇介紹了DataFrame的顯示引數,主要是對DataFrame中值進行調整。

本篇介紹DataFrame的顯示樣式的調整,顯示樣式主要是對錶格本身的調整,
比如顏色,通過顏色可以突出顯示重要的值,觀察資料時可以更加高效的獲取主要資訊。

下面介紹一些針對單個資料和批次資料的樣式調整方式,讓DataFrame的資料資訊更加的一目瞭然。

1. 多列顯示格式

每個DataFrame都有個style屬性,通過這個屬性可以來調整顯示的樣式。
下面的範例,一次調整多個型別的列的顯示。

import pandas as pd

df = pd.DataFrame(
    {
        "日期": ["2022-10-01", "2022-11-11", 
               "2022-12-12", "2023-01-01", "2023-02-02"],
        "單價": [1099.5, 8790.0, 12.55, 10999.0, 999.5],
        "數量": [1, 3, 1200, 4, 5],
    }
)

df["日期"] = pd.to_datetime(df["日期"])

col_format = {
    "日期": "{:%Y/%m/%d}", 
    "單價": "¥{:,.2f}", 
    "數量": "{:,} 件"
}
df.style.format(col_format)


調整之後:

  1. 日期格式改成用/來分割
  2. 單價前加了人民幣符號,並且用逗號作為千位分隔符
  3. 數量用逗號作為千位分隔符,加了單位

調整之後,表格中的內容放入報告中會更加美觀。

2. 背景色樣式

除了調整數值的顯示樣式,更強大的功能是,我們可以調整單元格的顏色。

比如,下面的資料,我們先計算出總價,
然後用紅色背景標記出總價最小的訂單,用綠色背景標記出總價最大的訂單。

df = pd.DataFrame(
    {
        "訂單號": ["0001", "0002", 
                "0003", "0004", "0005"],
        "單價": [1099.5, 8790.0, 
               12.55, 10999.0, 999.5],
        "數量": [1, 3, 1200, 4, 5],
    }
)

df["總價"] = df["單價"] * df["數量"]
col_format = {
    "單價": "¥{:,.2f}",
    "總價": "¥{:,.2f}",
}

df.style.format(col_format).highlight_min(
    "總價", color="red"
    ).highlight_max(
        "總價", color="lightgreen"
    )

3. 漸變色樣式

新增背景色之後,只能看出哪個訂單總價最高,哪個訂單總價最低。
對於其他的訂單,沒有直觀的印象,所以,下面我們更進一步用漸變色來標記總價列。

總價越高,背景色越深,這樣就對所有訂單的總價有了直觀的印象。

df = pd.DataFrame(
    {
        "訂單號": ["0001", "0002", "0003", "0004", "0005"],
        "單價": [1099.5, 8790.0, 12.55, 10999.0, 999.5],
        "數量": [1, 3, 1200, 4, 5],
    }
)

df["總價"] = df["單價"] * df["數量"]
col_format = {
    "單價": "¥{:,.2f}",
    "總價": "¥{:,.2f}",
}
df.style.format(
    col_format
    ).background_gradient(
        subset="總價", cmap="Greens"
    )

4. 條形圖樣式

再進一步,用條形圖+漸變色的方式顯示總價資訊。
這樣,不僅可以看出總價的高低,還能大致看出究竟高了多少。

df = pd.DataFrame(
    {
        "訂單號": ["0001", "0002", "0003", "0004", "0005"],
        "單價": [1099.5, 8790.0, 12.55, 10999.0, 999.5],
        "數量": [1, 3, 1200, 4, 5],
    }
)

df["總價"] = df["單價"] * df["數量"]

col_format = {
    "單價": "¥{:,.2f}",
    "總價": "¥{:,.2f}",
}
df.style.format(
    col_format
    ).bar(
        subset="總價", cmap="Wistia"
    )

5. 總結回顧

通過pandas本身的樣式引數,可以美化分析的結果,直接用於最後的報告或者PPT中。

pandas小技巧系統至此暫時告一段落,接下來,準備開始另一個關鍵的資料分析庫:numpy