如何为 Polar DataFrame 着色

2024-08-27 15:36
文章标签 dataframe 着色 polar

本文主要是介绍如何为 Polar DataFrame 着色,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

继续使用 Polars 库,同时能够为表格添加颜色和样式

本文中的示例展示了 Polars 表格在样式调整前后的对比

       欢迎来到雲闪世界。自 2022 年 Polars 库发布以来,它作为超高速 DataFrame 库迅速流行起来。与 Pandas 相比,白熊经过测试,速度更快。根据Polars 官方网站的说法,它声称性能提升了 30 倍以上。

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

在表格样式方面,Polars 提供的选项较少,而 Pandas 则有内置样式器。如果要为 Polars DataFrame 着色,一种简单的解决方案是将表格转换为 Pandas。

但是等等...如果某些代码需要稍后运行怎么办?

本文中的示例展示了 Polars 表格在样式调整前后的对比

这意味着我们必须运行 Pandas,这会导致速度大幅下降。另一种选择是在设置样式后将表格转换回 Polars。然后,如果我们想要设置结果的样式,则必须重复相同的过程。尽管这些解决方案有效,但它们非常不方便。 幸运的是,有一个名为“ Great Tables ”的包可以直接应用于 Polars 表。此包允许我们在使用 Polars 库时创建美观的表格。 本文将逐步指导如何使用 Great Tables 包来设置 Polars 表格的样式。 让我们开始吧!!

导入库

首先获取我们要使用的库。Great Tables 包是在MIT许可下使用的。

 numpy as np
import polars as pl
import polars.selectors as cs
import re
import wikipedia
import pandas as pdfrom great_tables import GT
from great_tables import style, loc

获取数据
为了说明本文解释的方法可以应用于现实世界的数据,我将使用来自维基百科的“按国家划分的风力发电量”数据。 首先,让我们使用Wikipedia 库来检索 HTML 数据。然后,我们将使用 Pandas 读取数据,然后将其转换为 Polars DataFrame。Wikipedia 中的数据在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

添加图片注释,不超过 140 字(可选)

由于行数较多,我将重点关注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

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

gt_df = GT(df)
gt_df

添加图片注释,不超过 140 字(可选)

接下来,让我们做一些基本的修改,例如添加标题并将% 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

添加图片注释,不超过 140 字(可选)

使用精美表格为 Polars DataFrame 着色 为了给表格着色,我们需要从调色板中创建颜色列表。如以下代码所示,本文将使用“夏季”调色板。也可以使用其他调色板,例如“ coolwarm ”或“ viridis ”。 提取的颜色数量为 101 种,因为下一步我们将把列中的最小-最大值缩放到 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 循环函数创建多个文本代码。每个代码用于根据颜色词典为每一行分配一种颜色。之后,将每个创建的文本合并为一个文本代码进行运行。

 
keep_txt = []
col_name = '% cap. growth'
idx = list(range(len(df)))str_txt = 'gt_df\
.tab_header(title = "Wind power generation by country 2023")\
.tab_style(style.text(weight="bold", color="white"),loc.body("% cap. growth",'+ max_idx + '))'for i,c in zip(idx, colors_cap):txt='.tab_style(style.fill("'+ c +'"),loc.body(columns="'+ col_name +'",rows='+ str(i) + '))'keep_txt.append(txt)df_txt = str_txt + ''.join(keep_txt)
tb = eval(df_txt)
tb

添加图片注释,不超过 140 字(可选)

从结果中,我们很容易发现,2023 年荷兰的资本增长率最高。深绿色区域还帮助我们看到荷兰附近其他高值国家。相反,亮黄色区域告诉我们低值在哪里。 现在让我们对% gen列应用相同的过程来显示此类别中百分比最高的国家。

 
list_gen = list(df['% gen.'])
n_gen = max(list_gen) - min(list_gen)
colors_gen = [dict_colors.get(int((i-min(list_gen))*100/n_gen)) for i in list_gen]col_name = '% gen.'
idx_gen = str(list_gen.index(max(list_gen)))
txt_bold='.tab_style(style.text(weight="bold",color="white"),loc.body("'+ col_name +'",'+ idx_gen + '))'keep_txt = []
idx = list(range(len(df)))for i,c in zip(idx, colors_gen):txt='.tab_style(style.fill("'+ c +'"),loc.body(columns = "'+ col_name +'",rows='+ str(i) + '))'keep_txt.append(txt)df_txt2 = df_txt + txt_bold + ''.join(keep_txt)
tb = eval(df_txt2)
tb

添加图片注释,不超过 140 字(可选)

我们很快注意到,丹麦在% gen列中的值最高。通过此列中的颜色,我们可以知道,没有其他国家的% gen值接近丹麦,因为没有其他深绿色显示。 现在您已经了解了为 DataFrame 着色的步骤和获得的结果。接下来,让我们将相同的概念应用于其他列。 然后,我们来谈谈在餐桌上添加颜色的好处。

 
list_gen = list(df['% gen.'])
n_gen = max(list_gen) - min(list_gen)
colors_gen = [dict_colors.get(int((i-min(list_gen))*100/n_gen)) for i in list_gen]col_name = '% gen.'
idx_gen = str(list_gen.index(max(list_gen)))
txt_bold='.tab_style(style.text(weight="bold",color="white"),loc.body("'+ col_name +'",'+ idx_gen + '))'keep_txt = []
idx = list(range(len(df)))for i,c in zip(idx, colors_gen):txt='.tab_style(style.fill("'+ c +'"),loc.body(columns = "'+ col_name +'",rows='+ str(i) + '))'keep_txt.append(txt)df_txt2 = df_txt + txt_bold + ''.join(keep_txt)
tb = eval(df_txt2)
tb

添加图片注释,不超过 140 字(可选)

 
list_gen = list(df['Cap. (GW)'])
n_gen = max(list_gen) - min(list_gen)
colors_gen = [dict_colors.get(int((i-min(list_gen))*100/n_gen)) for i in list_gen]col_name = 'Cap. (GW)'
idx_gen = str(list_gen.index(max(list_gen)))
txt_bold='.tab_style(style.text(weight = "bold",color="white"),loc.body("'+ col_name +'",'+ idx_gen + '))'keep_txt = []
idx = list(range(len(df)))for i,c in zip(idx, colors_gen):txt='.tab_style(style.fill("'+ c +'"), loc.body(columns="'+ col_name +'",rows='+ str(i) + '))'keep_txt.append(txt)df_txt4 = df_txt3 + txt_bold + ''.join(keep_txt)
tb = eval(df_txt4)
tb

添加图片注释,不超过 140 字(可选)

最后,对每一列应用相同的方法后,我们将得到一个如下所示的表格。

 
list_gen = [int(i[0:2]) for i in list(df['Cap. fac.'])]
n_gen = max(list_gen) - min(list_gen)
colors_gen = [dict_colors.get(int((i-min(list_gen))*100/n_gen)) for i in list_gen]col_name = 'Cap. fac.'
idx_gen = str(list_gen.index(max(list_gen)))
txt_bold='.tab_style(style.text(weight="bold",color="white"),loc.body("'+ col_name +'",'+ idx_gen + '))'keep_txt = []
idx = list(range(len(df)))for i,c in zip(idx, colors_gen):txt='.tab_style(style.fill("'+ c +'"),loc.body(columns="'+ col_name +'",rows='+ str(i) + '))'keep_txt.append(txt)df_txt5 = df_txt4 + txt_bold + ''.join(keep_txt)
tb = eval(df_txt5)
tb

瞧…!!

添加图片注释,不超过 140 字(可选)

从结果可以看出,突出显示表格有助于我们浏览表格。可以快速注意到每列中的最高值。添加颜色标尺还可以帮助我们找到高值和低值的位置。 此外,与原来的表格相比,这些颜色使表格看起来更有趣。

感谢关注雲闪世界。(Aws解决方案架构师vs开发人员&GCP解决方案架构师vs开发人员)

这篇关于如何为 Polar DataFrame 着色的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1112073

相关文章

Python使用Pandas库将Excel数据叠加生成新DataFrame的操作指南

《Python使用Pandas库将Excel数据叠加生成新DataFrame的操作指南》在日常数据处理工作中,我们经常需要将不同Excel文档中的数据整合到一个新的DataFrame中,以便进行进一步... 目录一、准备工作二、读取Excel文件三、数据叠加四、处理重复数据(可选)五、保存新DataFram

【python pandas】 Dataframe的数据print输出 显示为...省略号

pandas.set_option() 可以设置pandas相关的参数,从而改变默认参数。 打印pandas数据事,默认是输出100行,多的话会输出….省略号。 那么可以添加: pandas.set_option('display.max_rows',None) 这样就可以显示全部数据 同样,某一列比如url太长 显示省略号 也可以设置。 pd.set_option('display.

SparkRDD转DataSet/DataFrame的一个深坑

大数据技术与架构 点击右侧关注,大数据开发领域最强公众号! 暴走大数据 点击右侧关注,暴走大数据! By  大数据技术与架构 场景描述:本文是根据读者反馈的一个问题总结而成的。 关键词:Saprk RDD 原需求:希望在map函数中将每一

Pyspark DataFrame常用操作函数和示例

针对类型:pyspark.sql.dataframe.DataFrame 目录 1.打印前几行 1.1 show()函数 1.2 take()函数 2. 读取文件 2.1 spark.read.csv 3. 获取某行某列的值(具体值) 4.查看列名 5.修改列名 5.1 修改单个列名 5.2 修改多个列名 5.2.1 链式调用 withColumnRenamed 方法 5.2.2 使用

rdd,dataframe,dataset之间的区别

在spark中,RDD、DataFrame、Dataset是最常用的数据类型,本博文给出笔者在使用的过程中体会到的区别和各自的优势   共性: 1、RDD、DataFrame、Dataset全都是spark平台下的分布式弹性数据集,为处理超大型数据提供便利 2、三者都有惰性机制,在进行创建、转换,如map方法时,不会立即执行,只有在遇到Action如foreach时,三者才会开始

pandas.concat实现竖着拼接、横着拼接DataFrame

1、concat竖着拼接(默认的竖着,axis=0) 话不多说,直接看例子: import pandas as pddf1=pd.DataFrame([10,12,13])df2=pd.DataFrame([22,33,44,55])df3=pd.DataFrame([90,94]) df1 0010112213 df2 0022133244355 df3

回溯法-图的m着色问题

图的 m 着色问题 问题描述 给定一个无向连通图 ( G = (V, E) ) 和 ( m ) 种颜色,我们的任务是为图 ( G ) 的每个顶点着色,使得相邻的顶点颜色不同。如果存在这样的着色方案,我们称之为图 ( G ) 的 ( m ) 可着色问题。 算法思路 初始化:创建一个二维数组 colors 来记录每个顶点的颜色。选择起始点:从图中任选一个顶点作为起始点,并为其着色。相邻顶点着色

Anndata: AttributeError: ‘DataFrame’ object has no attribute ‘dtype’

Anndata: AttributeError: ‘DataFrame’ object has no attribute ‘dtype’ 背景解决方法 背景 在使用anndata做切片时,比如下面这样的例子 sub_rna = rna[:10] # rna is anndata 出现如下报错: AttributeError: ‘DataFrame’ object has

1079: [SCOI2008]着色方案(dp之记忆化搜索)

题目链接 题意:略 解答:考虑到每种颜色最多只能涂5个,设dp[a][b][c][d][e][last]:能涂一个格子的颜色有a种,能涂2个格子的颜色有b种,能涂3个格子的颜色有c种,能够涂4个格子的颜色有d种,能够涂5个格子的颜色有e种,且上一次涂的是last,的方案数。 能够想到的是,比如一种颜色x能涂3个格子,当我们使用它涂一个格子后,那么它就会变为能涂2个格子的类别中去了。这一点决定

通过MindOpt APL建模求解组合优化问题中的常见问题:图着色问题

组合优化问题:图着色问题 通过MindOpt APL建模求解组合优化问题中的常见问题:图着色问题 1. 背景知识 1.1. 组合优化问题 在之前发布的《组合优化问题:装箱问题》中,我们讲解了什么是组合优化(Combinatorial Optimization,CO)。这里仅简述: “组合”指的是从有限的对象集合中选择其中一部分元素作为解的过程,而“优化”则指的是在满足一定条件下,使得