翼度科技»论坛 编程开发 python 查看内容

【pandas小技巧】--花哨的DataFrame

8

主题

8

帖子

24

积分

新手上路

Rank: 1

积分
24
最近github上发现了一个库(plottable),可以用简单的方式就设置出花哨的 DataFrame 样式。
github上的地址:https://github.com/znstrider/plottable
1. 安装

通过 pip 安装:
  1. pip install plottable
复制代码
2. 行的颜色

使用 plottable的API,调整背景和字体的颜色非常方便。
2.1. 奇偶行不同颜色

奇偶行设置不同的颜色,让表格看起来有层次感。
  1. import numpy as np
  2. from plottable import Table
  3. data = np.random.random((5, 5))
  4. data = data.round(2)
  5. df = pd.DataFrame(data, columns=["A", "B", "C", "D", "E"])
  6. tbl = Table(df,
  7.             odd_row_color="#f0f0f0",
  8.             even_row_color="#e0f6ff"
  9.            )
复制代码

2.2. 背景和字体颜色

对于复杂的显示要求,可以逐行设置背景色和字体的颜色。
  1. import numpy as np
  2. from plottable import Table
  3. data = np.random.random((5, 5))
  4. data = data.round(2)
  5. df = pd.DataFrame(data, columns=["A", "B", "C", "D", "E"])
  6. tbl = Table(df)
  7. tbl.rows[0].set_facecolor("red")
  8. tbl.rows[0].set_fontcolor("white")
  9. tbl.rows[1].set_facecolor("blue")
  10. tbl.rows[1].set_fontcolor("white")
  11. tbl.rows[2].set_facecolor("green")
  12. tbl.rows[2].set_fontcolor("white")
  13. tbl.rows[3].set_facecolor("gray")
  14. tbl.rows[3].set_fontcolor("white")
  15. tbl.rows[4].set_facecolor("purple")
  16. tbl.rows[4].set_fontcolor("white")
复制代码

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

调整颜色,字体属于基本的设置,plottable强大之处在于可用图形化的方式来显示数据,
让我们可以一眼看出数据的大小和差距。
比如,下面的示例用 ColumnDefinition 来使用 plottable内置的数据显示方式。
  1. import numpy as np
  2. from matplotlib.colors import LinearSegmentedColormap
  3. from plottable import ColumnDefinition, Table
  4. from plottable.formatters import decimal_to_percent
  5. from plottable.plots import bar, percentile_bars, percentile_stars, progress_donut
  6. data = np.random.random((5, 5))
  7. data = data.round(2)
  8. df = pd.DataFrame(data, columns=["A", "B", "C", "D", "E"])
  9. print(df) # 显示原始数据
  10. cmap = LinearSegmentedColormap.from_list(
  11.     name="bugw", colors=["#ffffff", "#f2fbd2", "#c9ecb4", "#93d3ab", "#35b0ab"], N=256
  12. )
  13. tab = Table(
  14.     df,
  15.     textprops={"ha": "center"},
  16.     column_definitions=[
  17.         ColumnDefinition("index", textprops={"ha": "left"}),
  18.         ColumnDefinition("A", plot_fn=percentile_bars, plot_kw={"is_pct": True}),
  19.         ColumnDefinition(
  20.             "B", width=1.5, plot_fn=percentile_stars, plot_kw={"is_pct": True}
  21.         ),
  22.         ColumnDefinition(
  23.             "C",
  24.             plot_fn=progress_donut,
  25.             plot_kw={"is_pct": True, "formatter": "{:.0%}"},
  26.         ),
  27.         ColumnDefinition(
  28.             "D",
  29.             width=1.25,
  30.             plot_fn=bar,
  31.             plot_kw={
  32.                 "cmap": cmap,
  33.                 "plot_bg_bar": True,
  34.                 "annotate": True,
  35.                 "height": 0.5,
  36.                 "lw": 0.5,
  37.                 "formatter": decimal_to_percent,
  38.             },
  39.         ),
  40.     ],
  41. )
复制代码
原始数据显示:

plottable强化之后显示:

4. 图文混合

最后,演示一个通过 plottable 在表格中插入图片的示例。
其中数据来源是 2023 王者荣耀春季赛各个战队的数据
主要为了演示表格中插入图片(图片是各个战队的logo),所以只挑选了4个列来展示。
  1. import pandas as pd
  2. import numpy as np
  3. import matplotlib
  4. import matplotlib.pyplot as plt
  5. from matplotlib.colors import LinearSegmentedColormap
  6. from plottable import ColumnDefinition, Table
  7. from plottable.formatters import decimal_to_percent
  8. from plottable.plots import bar, percentile_bars, percentile_stars, progress_donut
  9. from plottable.plots import circled_image
  10. matplotlib.rcParams["font.sans-serif"] = ["Microsoft YaHei Mono"]
  11. matplotlib.rcParams["axes.unicode_minus"] = False
  12. df = pd.read_csv("d:/share/data.csv")
  13. df = df.set_index("排名")
  14. df["胜率"] = df["胜场"] / df["比赛场次"]
  15. df["logo"] = "d:/share/wzry-logos/" + df["战队"] + ".png"
  16. df = df.drop(columns=["胜场", "比赛场次", "场均KDA"])
  17. fig, ax = plt.subplots(figsize=(12, 12))
  18. col_defs = [
  19.         ColumnDefinition("排名", textprops={"ha": "left"}),
  20.         ColumnDefinition(
  21.             name="logo",
  22.             title="",
  23.             textprops={"ha": "center"},
  24.             width=0.5,
  25.             plot_fn=circled_image,
  26.         ),
  27.         ColumnDefinition("战队", textprops={"ha": "center"}),
  28.         ColumnDefinition(
  29.             "胜率",
  30.             plot_fn=progress_donut,
  31.             plot_kw={"is_pct": True, "formatter": "{:.0%}"},
  32.         ),
  33.     ]
  34. tbl = Table(
  35.     df,
  36.     ax=ax,
  37.     textprops={"ha": "center", "fontsize": 20},
  38.     column_definitions=col_defs,
  39. )
复制代码

上面示例中用到的数据和logo图标分享在:
https://url11.ctfile.com/f/45455611-870642180-a094e4?p=6872  (访问密码: 6872)
有兴趣可以试试看上面的示例,或者继续深入探索 plottable 的强大显示功能。

来源:https://www.cnblogs.com/wang_yb/p/17660485.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具