Pandas 表格样式设置指南,看这一篇就够了!

网站建设4年前发布
64 0 0

20230306105213096027027b23c7a7726690fcbc9a901a1fe34d925,大家好,我是阳哥。,最近这些年,Python在数据分析以及人工智能领域是越来越火。,这离不开pandas、numpy、sklearn、TensorFlow、PyTorch等数据科学包,尤其是 Pandas,几乎是每一个从事Python数据科学相关的同学都绕不过去的。,Pandas是一种高效的数据处理库,它以 dataframe 和 series 为基本数据类型,呈现出类似excel的二维数据。,在 Jupyter 中(jupyter notebook 或者 jupyter lab),可以对数据表格按照条件进行个性化的设置,方便形象的查看和使用数据。,Pandas提供了 DataFrame.style 属性,它会返回 Styler对象,用于数据样式的设置。,基于 Pandas提供的方法,本文主要内容概括如下:,20230306105214a13bf1818a172a395a6380db8749b431bb4c05272,内容目录,使用环境,本次使用的环境如下:,Pandas 和 Numpy 的版本为:,首先导入 pandas 和 numpy 库,这次咱们本次需要用到的两个 Python 库,如下:,数据准备,本次咱们使用的两份数据是关于主动基金以及消费行业指数基金的数据,本次演示用的数据仅为展示Pandas图表美化功能,对投资没有参考建议哈。,数据1,消费行业指数基金相关的数据,导入如下:,数据2,主动基金数据,导入如下:,文章中主要使用第一份数据。,用 hide_index() 方法可以选择隐藏索引,代码如下:,效果如下:,2023030610541219b55ac92423b306b74267a56e55e4b013318a906,隐藏索引,用 hide_columns() 方法可以选择隐藏一列或者多列,代码如下:,效果如下:,202303061052154170b2476322e0bf7d4239f4638abe9b3b01f4483,隐藏列,在设置数据格式之前,需要注意下,所在列的数值的数据类型应该为数字格式,如果包含字符串、时间或者其他非数字格式,则会报错。,可以用 DataFrame.dtypes 属性来查看数据格式。,格式如下:,从上面来看,数据格式主要包括字符串、数字和时间这三种常见的类型,此外,空值(NaN,NaT等)也是我们需要处理的数据类型之一。,Pandas 中可以通过 style.format() 函数来对数据格式进行设置。,2023030610521459998187387933c3dec03724d00c065327d9ea663,数据格式设置,空值设置,使用 na_rep 设置空值的显示,一般可以用 -、/、MISSING 等来表示:,2023030610521534e3cd810df66c024614776b5c7d3ff7de0897970,空值设置,对于最大值、最小值、NaN等各类值的颜色高亮设置,pandas 已经有专门的函数来处理,配合 axis 参数可以对行或者列进行应用:,highlight_max,通过 highlight_max()来高亮最大值,其中 axis=0 是按列进行统计:,20230306105413230386d33c9366ae4ee538a995756f7a94a38e715,高亮最大值,highlight_min,通过 highlight_min()来高亮最小值,其中 axis=1 是按行进行统计:,2023030610541302ff1cc37e2c86aa98e919ee5946a839fa113e368,高亮最小值,highlight_null,通过 highlight_null()来高亮空值(NaN值),效果如下:,20230306105217a807f5f339001dfdf233885240bbbb3c11ed2e431,高亮空值,highlight_between,highlight_between() 函数,对处于范围内的数据进行高亮显示。,highlight_between() 函数的使用参数如下:,Styler.highlight_between(subset=None, color='yellow', axis=0, left=None, right=None, inclusive='both', props=None),highlight_between() 函数,对处于范围内的数据进行高亮显示,通过 left 和 right 参数来设置两边的范围。,需要注意下,highlight_between() 函数从 pandas 1.3.0版本开始才有,旧的版本可能不能使用哦。,下面示例中 对2018年至2020年的年度涨跌幅度 -20%~+20% 范围内的数据进行高亮标注.,效果如下:,20230306105218714c75b049013a03ae5707f2ead06e1cfddef3174,也可以分别对不同年度的不同涨跌范围进行设置,比如下面示例中:,效果如下:,20230306105218646c661230adaeae3446524a74a12a2a138764802,highlight_max()、highlight_min()、highlight_null() 等函数的默认颜色设置,我们不一定满意,可以通过 props 参数来进行修改。,字体颜色和背景颜色设置,效果如下:,202303061052187790ed838f77e96f4c62704fe6a8b13252f06c208,字体加粗以及字体颜色设置,效果如下:,20230306105219d64cc7406bbfbce4b64578ccfe50bebd07fcd9710,类似的个性化设置,在本文后续内容中也是适用的。,使用 background_gradient() 函数可以对背景颜色进行设置。,该函数的参数如下:,Styler.background_gradient(cmap='PuBu', low=0, high=0, axis=0, subset=None, text_color_threshold=0.408, vmin=None, vmax=None, gmap=None),使用如下:,效果如下:,20230306105414795f32e4783bd745c067243ce75471bd6f3ce3234,如果不对 subset 进行设置,background_gradient 函数将默认对所有数值类型的列进行背景颜色标注。,对 subset 进行设置后,可以选择特定的列或特定的范围进行背景颜色的设置。,效果如下:,20230306105220f3e0d5494a99f71b9ff2954fecf2c2f5090a56167,此外,可以通过对 low 和 high 值的设置,可以来调节背景颜色的范围,low 和 high 分别是压缩 低端和高端的颜色范围,其数值范围一般是 0~1 ,各位可以调试下。,效果如下:,2023030610522107a737d73fc2314e04e912743fe03b71946ff3364,当数据范围比较大时,可以通过设置 vmin 和 vmax 来设置最小和最大的颜色的设置起始点。,比如下面,基金规模在20亿以下的,颜色最浅,规模70亿以上的,颜色最深,20~70亿之间的,颜色渐变。,20230306105221530101f78bac7943bb0420f25baacfe7aa1cd2446,通过 gmap 的设置,可以方便的按照某列的值,对行进行全部的背景设置,效果如下:,202303061207414177e75844b473b8d24737e80c82c0b5dd0f71874,gmap 还可以以矩阵的形式对数据进行样式设置,如下:,效果如下:,20230306105222f8b96f169e84fa83bc1929bbae16cd0127169e435,上面 gmap 是 3*3 矩阵,后面需要进行颜色设置的形状也需要是 3*3,需要保持一致。,需要注意的是 颜色设置是根据 gmap中的值来设置颜色深浅的,而不是根据 DataFrame 中的数值来的。,这个在某些特定的情况下可能会用到。,类似于背景色阶颜色设置,文本也是可以进行颜色设置的。,使用 text_gradient() 函数可以实现这个功能,其参数如下:,Styler.text_gradient(cmap='PuBu', low=0, high=0, axis=0, subset=None, vmin=None, vmax=None, gmap=None),text_gradient() 函数的用法跟 background_gradient() 函数的用法基本是一样的。,下面演示两个使用案例,其他的用法参考 background_gradient() 函数。,某列的文本色阶显示,效果如下:,2023030610541423f1d9e55cf9730a881339919ca621c5f4450b228,全部表格的文本色阶显示,效果如下:,2023030610522343dfa3d19c9fe212b19527763d3623fbb0a405746,数据条的显示方式,可以同时在数据表格里对数据进行可视化显示,这个功能咱们在 Excel 里也是经常用到的。,在 pandas 中,可以使用 DataFrame.style.bar() 函数来实现这个功能,其参数如下:,Styler.bar(subset=None, axis=0, color='#d65f5f', width=100, align='left', vmin=None, vmax=None),示例代码如下:,效果如下:,2023030610522487d36fb724d9917de848501789e7727ca87d8a938,上面这个可视化效果,对于正负数值的区别,看起来总是有点别扭。,可以通过设置 aligh 参数的值来控制显示方式:,将显示设置为 mid 后,符合大部分人的视觉审美观,代码如下:,效果如下:,关于颜色设置,color=['#99ff66','#ee7621'], color可以设置为单个颜色,所有的数据只显示同一个颜色,也可以设置为包含两个元素的list或tuple形式,左边的颜色标注负数值,右边的颜色标注正数值。,通过 apply 和 applymap 函数,用户可以使用自定义函数来进行样式设置。,其中:,先自定义了函数max_value(),用来找到符合条件的最大值,apply 使用的示例代码如下:,按列设置样式,效果如下:,20230306105224365933f658af107116e56808a71116de9c7334670,按行设置样式,效果如下:,2023030610541564c01eb6278abfa2f5a047a6e6ff84425b23c1187,按整个表格设置样式,按整个表格设置样式时,需要注意的是,整个表格的数据类型需要是一样的,不然会报错。,示例代码如下:,效果如下:,2023030610522615285c3172a717b93f61632e4a0c64f990e3bb438,继续上面的数据表格,我们来自定义一个函数,对于基金的年度涨跌幅情况,年度上涨以橙色背景标注,下跌以绿色背景标注,NaN值以灰色背景标注。,由于 applymap 是作用于每个元素的,因此该函数不需要 axis 这个参数来进行设置,示例代码如下:,效果如下:,20230306105227a6cd2ec29adad7c6daa4667cdb50147a85c80d275,在使用 Style 中的函数对表格数据进行样式设置时,对于有 subset 参数的函数,可以通过设置 行和列的范围来控制需要进行样式设置的区域。,对行(row)进行范围设置,效果如下:,20230306105227499a31f47ac88ebad769925c4975168aef137a626,效果如下:,20230306105416016d3fa903d473a51f69882b3908e3c38ec000947,效果如下:,20230306105228068cf7836665515d3fd792c2acd6c55fc2a934830,对于pandas 中样式设置后的共享复用,目前支持通过 Styler.export() 导出样式,然后通过 Styler.use() 来使用导出的样式。,不过经过阳哥的测试,简单的样式导出与使用是可以的。但稍微复杂一些的情况,目前的pandas版本是不太好用的。,示例如下,先保存当前样式:,保存的样式的效果如下:,202303061052282939651680b56bc69e7947fcebabe3899699ea216,使用保存的样式:,效果如下:,2023030610541656f8f34773c33ec3a7d88940814a3cf789ce9e209,由于后面的数据表格是没有空值的,所以两者的样式实际是一样的。,当样式设置较多时,比如同时隐藏索引、隐藏列、设置数据格式、高亮特定值等,这个时候有些操作在导出后使用时并没有效果。,测试如下,先保存样式:,保存样式的效果如下:,20230306105230c7a135b47479b56f5fe27826f9a6f82cb1238c205,使用保存的样式:,效果如下:,202303061052309385a65151cda4760ce841bfe23b56a40b853f838,从上面来看,我们希望的样式效果,并没有很好的实现。,所以,针对较为复杂的样式,还是乖乖的复制代码使用吧。,导出样式到 Excel 中,这个功能还是比较实用的。,DataFrames 使用 OpenPyXL 或XlsxWriter 引擎可以将样式导出到 Excel 工作表。,不过,这个功能目前也还是处于不断完善过程中,估计有时候有些内容会没有效果。,大家可以在使用过程中来发现其中的一些问题。,来看一个案例:,上面的案例内容导出到 excel 后,我从 excel 中打开查看了下效果如下:,202303061052306207caa93366d3e4e8b793fbfbd6e368014626672,可以看出,跟共享样式里有些相同的问题,比如隐藏索引、隐藏列、设置数据格式等效果并没有实现。,以上是 Pandas 表格样式设置内容的汇总,应该是汇集了大部分使用功能。有些样式设置功能,我是经常使用的,比如下面的表格:,   指数估值表,   基金数据表格

© 版权声明

相关文章