pandas小技巧-花哨的DataFrame

最近github上发现了一个库(plottable),可以用简单的方式就设置出花哨的 DataFrame 样式。

github上的地址:github.com/znstrider/p...

1. 安装

通过 pip 安装:

bash 复制代码
pip install plottable

2. 行的颜色

使用 plottable的API,调整背景和字体的颜色非常方便。

2.1. 奇偶行不同颜色

奇偶行设置不同的颜色,让表格看起来有层次感。

python 复制代码
import numpy as np

from plottable import Table

data = np.random.random((5, 5))
data = data.round(2)
df = pd.DataFrame(data, columns=["A", "B", "C", "D", "E"])
tbl = Table(df,
            odd_row_color="#f0f0f0",
            even_row_color="#e0f6ff"
           )

2.2. 背景和字体颜色

对于复杂的显示要求,可以逐行设置背景色和字体的颜色。

python 复制代码
import numpy as np

from plottable import Table

data = np.random.random((5, 5))
data = data.round(2)
df = pd.DataFrame(data, columns=["A", "B", "C", "D", "E"])
tbl = Table(df)
tbl.rows[0].set_facecolor("red")
tbl.rows[0].set_fontcolor("white")

tbl.rows[1].set_facecolor("blue")
tbl.rows[1].set_fontcolor("white")

tbl.rows[2].set_facecolor("green")
tbl.rows[2].set_fontcolor("white")

tbl.rows[3].set_facecolor("gray")
tbl.rows[3].set_fontcolor("white")

tbl.rows[4].set_facecolor("purple")
tbl.rows[4].set_fontcolor("white")

上例中每一行的背景设置了不同的颜色,字体都设置为白色。

3. 值的显示

调整颜色,字体属于基本的设置,plottable强大之处在于可用图形化的方式来显示数据,

让我们可以一眼看出数据的大小和差距。

比如,下面的示例用 ColumnDefinition 来使用 plottable内置的数据显示方式。

python 复制代码
import numpy as np

from matplotlib.colors import LinearSegmentedColormap

from plottable import ColumnDefinition, Table
from plottable.formatters import decimal_to_percent
from plottable.plots import bar, percentile_bars, percentile_stars, progress_donut

data = np.random.random((5, 5))
data = data.round(2)
df = pd.DataFrame(data, columns=["A", "B", "C", "D", "E"])

print(df) # 显示原始数据

cmap = LinearSegmentedColormap.from_list(
    name="bugw", colors=["#ffffff", "#f2fbd2", "#c9ecb4", "#93d3ab", "#35b0ab"], N=256
)
tab = Table(
    df,
    textprops={"ha": "center"},
    column_definitions=[
        ColumnDefinition("index", textprops={"ha": "left"}),
        ColumnDefinition("A", plot_fn=percentile_bars, plot_kw={"is_pct": True}),
        ColumnDefinition(
            "B", width=1.5, plot_fn=percentile_stars, plot_kw={"is_pct": True}
        ),
        ColumnDefinition(
            "C",
            plot_fn=progress_donut,
            plot_kw={"is_pct": True, "formatter": "{:.0%}"},
        ),
        ColumnDefinition(
            "D",
            width=1.25,
            plot_fn=bar,
            plot_kw={
                "cmap": cmap,
                "plot_bg_bar": True,
                "annotate": True,
                "height": 0.5,
                "lw": 0.5,
                "formatter": decimal_to_percent,
            },
        ),
    ],
)

原始数据显示:

plottable强化之后显示:

4. 图文混合

最后,演示一个通过 plottable 在表格中插入图片的示例。

其中数据来源是 2023 王者荣耀春季赛各个战队的数据

主要为了演示表格中插入图片(图片是各个战队的logo),所以只挑选了4个列来展示。

python 复制代码
import pandas as pd
import numpy as np

import matplotlib
import matplotlib.pyplot as plt
from matplotlib.colors import LinearSegmentedColormap

from plottable import ColumnDefinition, Table
from plottable.formatters import decimal_to_percent
from plottable.plots import bar, percentile_bars, percentile_stars, progress_donut
from plottable.plots import circled_image

matplotlib.rcParams["font.sans-serif"] = ["Microsoft YaHei Mono"]
matplotlib.rcParams["axes.unicode_minus"] = False

df = pd.read_csv("d:/share/data.csv")
df = df.set_index("排名")
df["胜率"] = df["胜场"] / df["比赛场次"]
df["logo"] = "d:/share/wzry-logos/" + df["战队"] + ".png"
df = df.drop(columns=["胜场", "比赛场次", "场均KDA"])

fig, ax = plt.subplots(figsize=(12, 12))

col_defs = [
        ColumnDefinition("排名", textprops={"ha": "left"}),
        ColumnDefinition(
            name="logo",
            title="",
            textprops={"ha": "center"},
            width=0.5,
            plot_fn=circled_image,
        ),
        ColumnDefinition("战队", textprops={"ha": "center"}),
        ColumnDefinition(
            "胜率",
            plot_fn=progress_donut,
            plot_kw={"is_pct": True, "formatter": "{:.0%}"},
        ),
    ]

tbl = Table(
    df,
    ax=ax,
    textprops={"ha": "center", "fontsize": 20},
    column_definitions=col_defs,
)

上面示例中用到的数据和logo图标分享在:
url11.ctfile.com/f/45455611-... (访问密码: 6872)

有兴趣可以试试看上面的示例,或者继续深入探索 plottable 的强大显示功能。

相关推荐
Aloudata4 分钟前
NoETL 指标平台如何保障亿级明细查询的秒级响应?——Aloudata CAN 性能压测深度解析
数据库·数据分析·自动化·指标平台
CodeCraft Studio2 小时前
【电子行业案例】借助LightningChart 实现高精密电子制造数据实时可视化
信息可视化·数据分析·制造·lightningchart·电子制造·制造数据可视化·高性能图表库
-To be number.wan2 小时前
为什么 pyecharts 在 Jupyter Notebook 里显示空白?
ide·python·jupyter·数据分析
BYSJMG3 小时前
大数据分析案例:基于大数据的肺癌数据分析与可视化系统
java·大数据·vue.js·python·mysql·数据分析·课程设计
Aloudata16 小时前
数据工程视角:指标平台选型深度对比(BI 指标中心 vs 传统 vs Headless vs 自动化平台)
数据分析·自动化·数据治理·指标平台·noetl
BYSJMG17 小时前
计算机毕业设计选题推荐:基于大数据的肥胖风险分析与可视化系统详解
大数据·vue.js·数据挖掘·数据分析·课程设计
Leo.yuan18 小时前
经营分析会,该讲些什么?
大数据·数据库·数据分析
java1234_小锋18 小时前
分享一套优质的基于Python的房屋数据分析预测系统(scikit-learn机器学习+Flask)
python·数据分析·scikit-learn
-To be number.wan18 小时前
Python数据分析:英国电商销售数据实战
开发语言·python·数据分析
muddjsv19 小时前
2026 数据分析主流语言全景解析:选型、场景与学习路径
数据挖掘·数据分析