前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Pandas表格样式设置,超好看!

Pandas表格样式设置,超好看!

作者头像
小F
发布于 2024-01-05 06:57:57
发布于 2024-01-05 06:57:57
71300
代码可运行
举报
运行总次数:0
代码可运行

大家好,我是小F~

今天给大家介绍如何给Pandas DataFrame添加颜色和样式。

通过这一方法,增强数据的呈现,使信息的探索和理解不仅内容丰富,而且具有视觉吸引力。

Pandas Styler是Pandas库中的一个模块,它提供了创建DataFrame的HTML样式表示的方法。

此功能允许在可视化期间自定义DataFrame的视觉外观。Pandas Styler的核心功能在于能够根据特定条件对单元格进行突出显示、着色和格式化。

增强了可视化体验,并能够更直观地解释数据集中包含的信息。

接下来,我们将使用一组数据创建一个数据透视表,为其提供不同的样式和条件格式,最终如上图所示。

数据透视表是一种表格数据结构,它提供来自另一个表的信息的汇总概述,根据一个变量组织数据并显示与另一个变量关联的值。

在本次分析中,我们将使用Apple Store应用程序数据集来探索数据透视表的创建和表格样式的自定义。

数据集涵盖从应用程序名称到大小、价格和评级等细节的各个方面。我们的目标是有效地分解信息,同时应用有效增强数据呈现和理解的风格。

数据说明。

查看环境基础信息。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import pandas as pd
import numpy as np
import math
import matplotlib.pyplot as plt
import warnings

# 关闭pandas warning
warnings.filterwarnings('ignore')
print("Python Libraries version:")
print(' - '*20)
print("Pandas version: ", pd.__version__)
print("Numpy version: ", np.__version__)
print("Matplotlib version: ", plt.matplotlib.__version__)

结果如下。

读取数据。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 读取数据
path='data/AppleStore.csv'
data =pd.read_csv(path,sep=';')

创建数据透视表。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 过滤数据,只保留前15个类型
top_genre = data.value_counts('prime_genre')[:15].index.tolist()
tmp = data.loc[data['prime_genre'].isin(top_genre),['prime_genre','user_rating','price']]

# 创建一个新列,将评级四舍五入到最接近的整数
tmp['user_rating'] = [f'rating_{str(math.trunc(item))}' for item in tmp['user_rating']]

# 创建数据透视表
tmp_pivot = (
 pd.pivot_table(
 data = tmp,
 columns='user_rating',
 index='prime_genre',
 values='price',
 aggfunc='mean',
 fill_value=0
 ).reset_index().round(2)
)

# 重命名列
tmp_pivot.columns.name=''
# 打印透视表
tmp_pivot

结果如下。

现在我们将探索Pandas中的“style”模块,它使我们能够增强DataFrame的视觉呈现。“style”模块提供了不同的选项来修改数据的外观,允许我们自定义以下方面:

给单元格着色:根据单元格值或条件应用不同的颜色。

突出显示:强调特定的行、列或值。

格式:调整显示值的格式,包括精度和对齐方式。

条形图:在单元格内用水平或垂直条形图表示数据。

样式:设置标题的背景颜色

在本节中,我们将应用样式到标题和表格。因此,我们使用背景颜色来突出显示标题和表格的其余部分。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 更改列的背景颜色
headers = {
 'selector': 'th.col_heading',
 'props': 'background-color: #5E17EB; color: white;'
}
index_style = {
 'selector': 'th.index_name',
 'props': 'background-color: #5E17EB; color: white;'
}
tmp_pivot_style = (
 tmp_pivot
 .style
 .set_table_styles([headers,index_style])
 .set_properties(**{'background-color': '#ECE3FF','color': 'black'})
)
tmp_pivot_style

样式:设置特定单元格的背景颜色

下面的代码片段说明了如何使用pandas样式为DataFrame中的特定单元格设置自定义背景颜色。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(
   tmp_pivot
   .style
   .set_table_styles([headers, index_style])
   .set_properties(**{'background-color': '#ECE3FF', 'color': 'black'})
   .set_properties(**{'background-color': '#FD636B', 'color': 'white'},subset=pd.IndexSlice[4, 'rating_5'])
)

样式:设置数据框中最大/最小值的背景颜色

现在,我们将重点突出显示DataFrame中的最大值和最小值。因此,我们将为这些极值分配独特的背景颜色,以便于更快、更直观地理解数据集。下面的代码片段演示了如何实现这种风格增强。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 选择'rating_'开头的列
columns = tmp_pivot.columns[tmp_pivot.columns.str.startswith('rating_')]

# 获取最大、最小值
max_value = tmp_pivot[columns].max().max()
min_value = tmp_pivot[columns].min().min()
# 最大值样式
max_style = f'border: 4px solid #3BE8B0 !important;'
# 最小值样式
min_style = f'background-color: #FF66C4; '
(
 tmp_pivot
 .style
 .set_table_styles([headers, index_style])
 .set_properties(**{'background-color': '#ECE3FF', 'color': 'black'})
 .set_properties(**{'background-color': '#FD636B', 'color': 'white'}, subset=pd.IndexSlice[4, 'rating_5'])
 .applymap(lambda x: max_style if x == max_value else '')
 .applymap(lambda x: min_style if x == min_value else '', subset=columns)
)

风格:颜色背景渐变

在接下来的部分中,我们将深入研究颜色图的概念,它表示以渐变方式排列的颜色光谱。颜色图本质上是一个颜色调色板,由独特的名称组成,最流行的名称是['viridis'、'magma'、'Greens'、'Reds']。

创建这些色谱的主要目的是增强数据的视觉表示。渐变中的每种颜色都具有特定的细微差别,有助于提供更细致的数据可视化体验。

对于广泛的颜色选项,您可以浏览matplotlib colormaps链接。

https://matplotlib.org/3.1.0/tutorials/colors/colormaps.html

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import matplotlib.pyplot as plt
import numpy as np

# 定义颜色映射
for cmap_item in ['viridis', 'magma','Greens','Reds']:
 cmap = plt.get_cmap(cmap_item)
 # 创建颜色渐变
 gradient = np.linspace(0, 1, 256).reshape(1, -1)
 # 显示调色板
 plt.figure(figsize=(10, 0.2))
 plt.imshow(gradient, aspect='auto', cmap=cmap)
 plt.axis('off')
 plt.title(f'{cmap_item.capitalize()} Color Palette', loc='left', fontsize=9)
 plt.show()

Viridis调色板。现在,我们将向数据透视表应用颜色渐变,以便可以使用Viridis调色板观察它的着色方式。在这种情况下,较浅的颜色表示分布中较大的值,而较深的阴影对应于分布中较小的值。这种方法提供了一种视觉表示,可以直观地传达数据的大小,从而更容易辨别数据集中的模式和变化。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
plt.get_cmap( 'viridis' ,lut= 20 )
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
( 
tmp_pivot 
.style 
.set_table_styles([headers, index_style]) 
.background_gradient(cmap= 'viridis' ,subset=columns) 
)

风格:列中的彩色背景

在下一个代码块中,我们将通过向特定列引入不同的颜色背景来增强数据透视表的视觉表示。此技术有助于更好地突出显示数据并对其进行分类,从而更轻松地从表格中获取见解。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(
 tmp_pivot
 .style
 .set_table_styles([headers, index_style])
 .set_properties(**{'background-color': '#FFCFC9','color':'black'},subset=['rating_0','rating_1'])
 .set_properties(**{'background-color': '#FFF1B0','color':'black'},subset=['rating_2','rating_3'])
 .set_properties(**{'background-color': '#BEEAE5','color':'black'},subset=['rating_4','rating_5'])
)

风格:彩条

在本节中,我们将实现style.bar函数以将动态颜色条引入到我们的DataFrame中。颜色条提供数据值的直观表示,为不同的数据范围分配不同的颜色。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(
 tmp_pivot
 .style
 .set_table_styles([headers, index_style])
 .set_properties(**{'background-color': '#ECE3FF', 'color': 'black'})
 .set_properties(**{'background-color': 'white','color':'black'},subset=columns)
 .bar(color='#FFCFC9',subset=['rating_0','rating_1'])
 .bar(color='#FFF1B0',subset=['rating_2','rating_3'])
 .bar(color='#BEEAE5',subset=['rating_4','rating_5'])
)

风格:分列图像

在本节中,我们将通过向附加列添加图像来探索数据表示的增强。这种方法提供了一种替代方法来提升所呈现数据的视觉效果。这些图像可以作为图标、代表品牌或传达额外的视觉元素来吸引和吸引观众。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 创建一个函数,根据类型将图像添加到dataframe
def add_image(image_name):
 img_url = f"img/icons/img_{image_name}.png"
 width = "width: 50px"
 height = "height: 50px"
 text_align ="center"
 return f'{width};{height}; content: url({img_url}); text-align:{text_align}'

# 将函数应用于dataframe
styled_df = (
 tmp_pivot
 .head(5)
 .reset_index()
 .rename({'index': 'genre'}, axis=1)
 .style.applymap(add_image, subset=pd.IndexSlice[:, ['genre']])
 .set_table_styles([headers, index_style])
 .set_properties(**{'background-color': '#ECE3FF', 'color': 'black'})
)

# 显示带有图像的dataframe
display(styled_df)

风格:基于百分位数的表情符号表示

在本节中,我们将深入研究基于百分位值的表情符号的创造性使用,提供一种独特的方法来提升数据表示。通过整合不同的表情符号,我们增强了数据的视觉冲击力。具体来说,我们使用圆圈和小队作为表情符号,为我们的数据点带来微妙的表达。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def get_percentiles(row_data, bins=3, emoji='circle'):
    emoji_labels = {
        'circle': {3: ['🔴', '🟡', '🟢'], 
                   4: ['🔴', '🟠', '🟡', '🟢']},
        'squad': {3: ['🟥', '🟨', '🟩'], 
                  4: ['🟥', '🟨', '🟧', '🟩']}
    }

    if emoji in ['max', 'min', 'min_max']:
        return create_series(row_data, emoji)
    elif emoji in emoji_labels and bins in emoji_labels[emoji]:
        labels = emoji_labels[emoji][bins]
        return pd.cut(row_data, bins=len(labels), labels=labels, ordered=False)
    else:
        return row_data

def create_series(row_data, emoji):
    if emoji == 'max':
        return pd.Series(['🟩' if item == row_data.max() else '⬜' for item in row_data])
    elif emoji == 'min':
        return pd.Series(['🟥' if item == row_data.min() else '⬜' for item in row_data])
    elif emoji == 'min_max':
        return pd.Series(['🟥' if item == row_data.min() else '🟩' if item == row_data.max() else '⬜' for item in row_data])

def get_conditional_table_column(data, bins=3, emoji='circle'):
    tmp = data.copy()
    for column in data.columns:
        if pd.api.types.is_numeric_dtype(data[column]):
            row_data_emoji = get_percentiles(data[column], bins, emoji).astype(str)
            tmp[column] = data[column].astype(str) + ' ' + row_data_emoji
    return tmp

def get_conditional_table_row(data, bins=3, emoji='circle'):
    response_values = []
    column_str = [item for item in data.columns if data[item].dtypes not in ['int64', 'float64']]
    columns_num = [item for item in data.columns if data[item].dtypes in ['int64', 'float64']]

    for row in range(data.shape[0]):
        row_data = data.loc[row, columns_num]
        percentil = get_percentiles(row_data, bins, emoji)
        row_data = row_data.apply(lambda x: '{:.2f}'.format(x))
        percentil_values = [str(row_data[item]) + ' ' + percentil[item] for item in range(percentil.shape[0])]
        response_values.append(percentil_values)

    result_df = pd.DataFrame(response_values).round(2)
    result_df.columns = columns_num
    result_df = pd.concat([data[column_str], result_df], axis=1)
    return result_df


# 按列条件筛选
get_conditional_table_row(data=tmp_pivot,emoji='min_max')

# 最小值
get_conditional_table_column(data=tmp_pivot,emoji='min')

# 最大值
get_conditional_table_column(data=tmp_pivot,emoji='max')

# 4分类
get_conditional_table_column(data=tmp_pivot,emoji='circle',bins=4)

最后大家可以自行去访问学习Pandas风格文档。

https://pandas.pydata.org/docs/user_guide/style.html

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-01-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 法纳斯特 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
免费代码签名数字证书真的有吗?代码签名数字证书有什么好处?
由于现在软件安全性逐渐降低,很多软件开发者都会通过各种方式来保护自己的软件安全,信息化社会中很多东西泄露速度都是很快的,可能你刚刚发布了软件人家就能找到你的核心代码,核心代码作为软件最为重要的东西,开发者们往往都会在软件发布之前申请办理代码签名证书,能够最大程度的保护软件代码的完整性以及安全性,常见的代码签名证书就有数字证书凭证,那么免费代码签名数字证书真的有吗?代码签名数字证书有什么好处?
用户8715145
2021/10/14
2.4K0
代码签名证书有用吗?代码签名证书在哪申请比较方便?
互联网技术的快速发展大大提升了人们的生活水平,以前买东西都是需要上门购物的,现在在手机或者电脑上面就可以直接购买了,物品还会由快递直接送货上门,平时生活中和朋友们聊天视频也都可以直接在互联网上面进行,这些操作一般来说都是通过软件来实现的,所以大家平时也会下载各种各样的软件,不过在下载的时候会遇到一些风险提示的软件,这就是没有代码签名证书的软件,那么代码签名证书有用吗?代码签名证书在哪申请比较方便?
用户8715145
2021/10/13
5930
什么人需要代码签名证书?代码签名证书如何使用?
互联网的快速发展虽然方便人们的日常生活,不过也带来了一些不好的影响,信息的安全性就是非常大的问题,相对以前的社会来说现在信息传播的速度太快了,在互联网上面很多信息都容易泄露出去,为了增加网络安全每个人也都会运用各种方式。关于软件方面的安全开发者以及发布者都是比较头痛的,为了方便制作方以及用户们的使用,软件需要可以办理相关的代码签名证书,那么什么人需要代码签名证书?代码签名证书如何使用?
用户8715145
2021/10/14
6640
电脑怎么申请代码签名证书 申请代码签名证书需要注意什么
我们都知道代码签名证书的重要性, 它对于软件是非常重要的,能够让软件的下载变得更加的可靠,让用户更加信任。但是,电脑怎么申请代码签名证书?其实过程非常的简单。
用户8715145
2021/10/13
6250
代码签名证书是什么东西?代码签名证书哪个好?
互联网技术的发展大大方便了人们的日常生活,而且随着智能手机的普及也让人们的日常生活越来越不开互联网,大家可以在手机上完成各种操作,无论是购物还是浏览文章都是非常方便的,不过想要实现这些功能都是需要借助各种软件的,为了满足用户们的各种需求,很多互联网公司也开始研发自己的软件,无论在电脑或者手机上面都可以随意使用,软件是需要代码签名证书才可以正常访问以及使用的,那么代码签名证书是什么东西?代码签名证书哪个好?
用户8715145
2021/10/12
6940
代码签名证书的类型及好处有哪些?代码签名证书是需要自己去申请吗?
大家平时生活中会需要用到各种类型的软件,这些软件也为人们的日常生活提供了很多便利,随着市面上的软件越来越多,很多软件公司都为自己的代码安全感到担心,辛辛苦苦开发出来的软件如果被别人盗取或者篡改代码就会对用户产生影响,从而就会造成软件的用户大量流失,对于软件开发公司的信誉也是有很大影响的,使用代码签名证书就可以保证软件是合法使用的,软件的代码也能得到更好的保护,那么代码签名证书的类型及好处有哪些?代码签名证书是需要自己去申请吗?
用户8715145
2021/10/13
9790
代码签名证书申请是免费的吗?代码签名证书申请步骤是什么?
随着现在各种软件的广泛使用,软件开发者也对开发的软件进行各种安全防护,一些火热的软件在发布之后就遭到了别人的恶意复制,核心代码都被别人盗取使用,所以软件的安全问题一直都是非常重要的。国家为了维护软件开发者以及内容发布者的利益,也推出了很多项有用的举措,现在软件开发之后都需要申请办理代码签名证书,这样就代表这款软件可以合法使用了,那么代码签名证书申请是免费的吗?代码签名证书申请步骤是什么?
用户8715145
2021/10/13
2.1K0
代码签名证书
随着全社会网络安全意识的空前高涨,个人隐私及信息安全保护已经成为我们日常生活关注的焦点。我们日常使用的电脑软件,手机APP等都是需要关注防范的重点,稍有疏忽就可能成为泄露个人信息的罪魁祸首,因此,权威可信的软件是我们下载使用时的首选。由此一来,软件开发商为了让自己的软件具有高可信度,在软件公开发布前使用代码签名证书就显得十分必要。今天,我们就一起了解下软件使用代码签名证书的好处和必要性。
JoySSL
2023/03/09
5440
代码签名证书
代码签名证书签名需要联网吗?代码签名证书有哪些作用?
随着互联网的资源和内容变得日益丰富,用户在访问网站或者使用软件的时候,需要验证这些内容的安全性以及正规性,代码签名可以提供软件发行者的身份信息,能够验证软件是否存在代码被修改的情况,代码签名证书签名需要联网吗?代码签名证书的作用是什么?怎样申请代码签名证书?
用户8715145
2021/11/12
1.7K0
为什么要办代码签名证书?代码签名证书在哪里可以办?
随着软件技术的不断发展,现在手机或者电脑上面平时会用到各种软件,不同的软件功能也是不一样的,通过软件可以做到很多事情,正是因为软件的盛行现在很多互联网公司或者购物平台等也都会推出各自的软件,让用户们随时随地可以在软件上面进行操作,现在非常火热的各种网络游戏其实也属于一种软件类型。软件想要正常的使用是需要拥有代码签名证书的,不然使用过程中也会出现各种问题,那么为什么要办代码签名证书?代码签名证书在哪里可以办?
用户8715145
2021/10/14
7230
代码签名用什么证书?使用代码签名证书有哪些好处?
有一些人可能会对代码签名感到陌生,其实它可以看成一种提升软件产品可靠性和安全性的方式,开发者通过对代码的数字签名,能够证明这款软件是正规的,软件里面的代码内容没有被非法篡改,所以用户可以放心使用,代码签名用什么证书?使用代码签名证书的好处有哪些?
用户8715145
2021/11/12
7100
代码签名证书有什么用?如何申请代码签名证书?
相信网络技术人员都会对代码签名证书的概念感到熟悉,它为软件开发方提供了理想解决方案,可以用来标识软件开发方的身份,需要先获得数字证书,然后才能够实现代码签名,代码签名证书有什么用?怎样申请代码签名证书?
用户8715145
2021/11/12
7870
代码签名证书时出错30005怎么办 代码签名证书的作用
代码签名证书在购买的时候一定要通过正规的渠道进行购买,如果是从一些不法平台购买得来的,很有可能会出现代码签名证书时出错30005的状态。出现这样的情况的话,大家首先要做的是先去找购买的平台进行询问,或者是自己找解决办法。
用户8715145
2021/11/26
1.1K0
代码签名证书出错原因有哪些?申请代码签名证书多少钱?
代码签名证书属于一类较为常见和实用的互联网产品,它可以起到标识开发方身份以及软件来源的作用,对于软件开发方和用户来讲都有好处,能够避免软件开发方的权益受到侵害,能够防止用户下载到含有恶意程序的软件,代码签名证书出错有哪些常见原因?申请代码签名证书的费用是多少?
用户8715145
2021/11/26
8230
代码签名证书申请流程是什么?使用代码签名证书有何益处?
对于软件开发商来讲,他们应当都不会对代码签名证书这种事物感到陌生,互联网场景具有开放化和互访化的特点,所以为了保障软件开发商的权利,为了避免原创软件内容被非法复制或恶意篡改,所以有必要申请代码签名证书,代码签名证书申请流程是怎样的?使用代码签名证书的好处是什么?
用户8715145
2021/11/26
5310
EV代码签名证书
在互联网世界中,很多人都会通过下载各种软件进行工作、生活,这其中就会用到代码签名证书,否则将会被网站提示“软件不安全”。
柳絮云泡泡
2023/03/07
1.1K0
EV代码签名证书
安装代码签名证书有什么好处吗?哪些人需要代码签名证书?
运维工作者都知道,开发代码往往需要花费数百个小时,在耗费了极大精力的前提下,最不想看到的就是代码被恶意的修改和拦截,这样不仅会让用户产生不信任感,而且还会影响自己的信誉。但黑客们总是防不胜防,往往在我们不经意间就在用户的电脑上安装了某些恶意软件。这时候大家想到的解决办法就是安装代码签名证书。那么,安装代码签名证书有什么好处吗?一起来一探究竟吧!
用户8715145
2021/10/12
1.2K0
代码签名证书,软件开发者的不二之选
提起软件代码签名证书,可能对大多数人来说比较陌生,但是对于软件开发者来说是一款在软件发布前必不可少的工具。之所以这样说的原因在于,代码签名证书可以有效保障用户和软件开发者的权益。
JoySSL
2023/02/22
4830
代码签名证书,软件开发者的不二之选
什么是代码签名证书?
用户信任他们开发的软件对于软件开发人员来说至关重要。用户完全有权知道他们正在下载的软件来自受信任的来源,而不是任何恶意的第三方。代码签名证书可帮助您获得同样的信任。
柳絮云泡泡
2023/03/28
8180
什么是代码签名证书?
代码签名证书出错是什么意思 代码签名证书的特点
代码签名证书不仅对个人很有用,对于企业来讲也是必要的。但是需要大家进行购买证书,有的人在购买证书以后,却被电脑的安全系统拦截。这时候大家就会出现疑问了,代码签名证书出错是什么意思?为什么会出现这种情况?
用户8715145
2021/11/26
1.5K0
推荐阅读
相关推荐
免费代码签名数字证书真的有吗?代码签名数字证书有什么好处?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档