news 2026/1/17 8:35:06

如何为 Polars DataFrame 添加颜色

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何为 Polars DataFrame 添加颜色

原文:towardsdatascience.com/how-to-color-polars-dataframe-8ada66161226

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/06f1c9a28173f83fce19bf3eba329b9b.png

由 ChatGPT 生成的 AI 图像。提示:在雪地景观中画一只北极熊。

由于 Polars 库于 2022 年发布,它因其作为超快速 DataFrame 库而迅速获得了人气。与 Pandas 相比,白熊经过测试并被证明要快得多。根据官方 Polars 网站,它声称性能提升了 30 倍以上。

然而,没有什么是完美的。Polars 库似乎有一些限制。

当谈到表格风格化时,Polars 提供的选项较少,而 Pandas 提供了 内置的样式化工具。如果你想要为 Polars DataFrame 添加颜色,一个直接的方法是将表格转换为 Pandas。

但等等…如果稍后需要运行某些代码呢?

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/e36a2abf76947f9dea2e8540dd236a83.pnghttps://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/594addbb57eed58a4b999a914ed1d7c3.png

本文展示了在本文中风格化前后 Polars 表格的示例。图片由作者提供。

这意味着我们必须运行 Pandas,这可能会导致速度大幅降低。另一个选择是在风格化后,将表格转换回 Polars。然后,如果我们想对结果进行风格化,必须重复相同的过程。尽管这些解决方案是可行的,但它们相当不方便。

幸运的是,有一个名为“Great Tables”的包可以直接应用于 Polars 表格。这个包允许我们在使用 Polars 库的同时创建一个看起来很棒的表格。

本文将逐步指导使用 Great Tables 包来风格化 Polars 表格。

让我们开始吧!!

导入库

从获取我们将要使用的库开始。Great Tables 包是在 MIT 许可下使用的。

importnumpyasnpimportpolarsasplimportpolars.selectorsascsimportreimportwikipediaimportpandasaspdfromgreat_tablesimportGTfromgreat_tablesimportstyle,loc

获取数据

为了展示本文中解释的方法可以应用于现实世界的数据,我将使用来自维基百科的“各国风能”数据。

首先,让我们使用 Wikipedia 库 来检索 HTML 数据。然后,我们将使用 Pandas 读取数据,在将其转换为 Polars DataFrame 之前。维基百科的数据是在 CC BY-SA 4.0 国际许可下使用的。

如果你想尝试另一个数据集,这一步可以跳过。

wikiurl='https://en.wikipedia.org/wiki/Wind_power_by_country'tables=pd.read_html(wikiurl)df=pl.DataFrame(tables[4])df

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/6e320b5cf51391e6ab31b6901d597429.png

由于行数较多,我将重点关注*Cap. (GW)*值高于 5 的国家。显示世界数据的第一行也将被删除。以下代码展示了如何过滤 Polars DataFrame。

如果您想选择其他列或使用其他值进行过滤,请随意修改以下代码。

no_list=['World']df=df.filter(pl.col('Cap. (GW)')>6)df=df.filter(~pl.col('Country').is_in(no_list))df

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/9dacb4520d7a70dfa3c7e0ad8e2bf552.png


使用 Great Tables 显示 Polars DataFrame

现在 Polars 表格已经准备好了,让我们尝试使用 Great Tables 包来显示表格。

gt_df=GT(df)gt_df

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/40f9c3e5598146344870790ff545809c.png

使用 Great Tables 显示显示 Wind power generation by country 2023 数据。图片由作者提供。

接下来,让我们做一些基本的修改,比如添加标题并使*% cap. growth*列中的最大值加粗。

list_cap=list(df['% cap. growth'])max_idx=str(list_cap.index(max(list_cap)))## Get the maximum valuestr_txt='gt_df.tab_header(title="Wind power generation by country 2023").tab_style(style.text(weight="bold",color="black"),loc.body("% cap. growth",'+ max_idx + '))' tb=eval(str_txt)tb

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/111ee4799df8ceca184cc493534a002a.png

添加标题并使列中的最大值加粗。图片由作者提供。

使用 Great Tables 为 Polars DataFrame 着色

为了着色表格,我们需要从颜色调色板中创建一个颜色列表。如以下代码所示,本文将使用‘summer’调色板。还可以使用其他调色板,如‘coolwarm’或‘viridis’。

提取的颜色数量为 101,因为在下一步中,我们将把列中的 min-max 值缩放到 0–100。然后,将获得的颜色列表枚举以创建用于后续的字典。

importseabornassns colors=list(sns.color_palette(palette='summer_r',n_colors=101).as_hex())dict_colors=dict(enumerate(colors))

在下一步中,我们将对*% cap. growth*列中的值进行缩放。最小值为 0,最大值为 100。之后,使用颜色字典将颜色代码分配给每个缩放值。

n_cap=max(list_cap)-min(list_cap)percentage_cap=[int((i-min(list_cap))*100/n_cap)foriinlist_cap]colors_cap=[dict_colors.get(p)forpinpercentage_cap]

接下来是着色过程,for 循环函数将被应用以创建多个文本代码。每个代码用于根据颜色字典为每一行分配颜色。之后,所有创建的文本将合并为一个文本代码以运行。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2025/12/23 0:16:43

NS模拟器工具终极指南:5步完成自动化部署

NS模拟器工具终极指南:5步完成自动化部署 【免费下载链接】ns-emu-tools 一个用于安装/更新 NS 模拟器的工具 项目地址: https://gitcode.com/gh_mirrors/ns/ns-emu-tools 还在为复杂的NS模拟器安装流程而头疼吗?ns-emu-tools作为一款专业的自动化…

作者头像 李华
网站建设 2025/12/23 0:13:59

利用Wireshark深入理解ModbusTCP报文格式说明

从抓包开始吃透Modbus TCP:用Wireshark看懂每一个字节的含义你有没有遇到过这样的情况?明明代码写得没问题,PLC也通了电,但HMI上就是读不到温度值;或者下发了一个控制命令,设备毫无反应。这时候你打开调试日…

作者头像 李华
网站建设 2026/1/4 20:42:23

使用libiconv-win-build在Windows平台下编译libiconv

最近编译代码出现了libiconv库不能用的问题: ——使用原来的库node 启动时,直接报错,无法加载.node。 在libiconv官方下载源码使用MSYS2环境编译后,又加载不了库接口函数: ——LNK2019: 无法解析的外部符号 _libico…

作者头像 李华
网站建设 2026/1/17 7:57:01

在Buildroot中集成libwebkit2gtk-4.1-0安装步骤

在 Buildroot 中集成 libwebkit2gtk-4.1-0:从零构建嵌入式 Web 渲染能力你有没有遇到过这样的需求?客户希望在一块 ARM 开发板上跑一个带现代网页界面的工业 HMI,支持 HTML5、JavaScript 动画,甚至能播放简单的 SVG 仪表盘——但又…

作者头像 李华
网站建设 2026/1/3 21:16:21

Elasticsearch日志分析系统部署全流程解析

从零构建企业级日志分析平台:Elasticsearch 实战部署全记录你有没有遇到过这样的场景?线上服务突然报错,几十台服务器的日志散落在各处,运维人员疯狂地ssh登录、tail -f查看、手动 grep 搜索……半小时过去了,问题还没…

作者头像 李华
网站建设 2026/1/13 9:27:37

springboot和vue框架的校内学生兼职信息管理系统_j57h35n4

文章目录具体实现截图主要技术与实现手段关于我本系统开发思路java类核心代码部分展示结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!具体实现截图 同行可拿货,招校园代理 springboot和vue框架的校内学生兼职信息管理系统_j57h35n…

作者头像 李华