原文: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 许可下使用的。

import numpy as np
import polars as pl
import polars.selectors as cs
import re
import wikipedia
import pandas as pd

from great_tables import GT
from great_tables import style, 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 value

str_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。然后,将获得的颜色列表枚举以创建用于后续的字典。

import seaborn as sns
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) for i in list_cap] 
colors_cap = [dict_colors.get(p) for p in percentage_cap]

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

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐