美文网首页Python
酷炫极了!!!Pandas定制化DataFrame样式显示设定

酷炫极了!!!Pandas定制化DataFrame样式显示设定

作者: 数据蝉 | 来源:发表于2020-04-16 18:53 被阅读0次

一、需求背景

虽然pandas 会尽可能地将一个DataFrame 完整且漂亮地呈现出来,有时候你还是会想要改变预设的显示方式。这节列出一些常见的使用情境。

二、案例实战

2.1 完整显示所有列

有时候一个DataFrame 里头的栏位太多, pandas 会自动省略某些中间栏位以保持页面整洁:

import pandas as pd
import numpy as np

np.random.seed(24)
df = pd.DataFrame({'A': np.linspace(1, 10, 10)})
df = pd.concat([df, pd.DataFrame(np.random.randn(10, 30))],axis=1)
df.iloc[3, 3] = np.nan
df.iloc[0, 2] = np.nan
图片.png

但如果你无论如何都想要显示所有栏位以方便一次查看,可以透过pd.set_option函数来改变display.max_columns设定:

pd.set_option("display.max_columns", None) 
df 
图片.png

另外你也可以使用T来转置(transpose)当前DataFrame,垂直显示所有栏位:

df.T.head (15)
图片.png
此外,你可以在pandas官方文件里查看其他常用的显示设定
https://pandas.pydata.org/pandas-docs/stable/user_guide/style.html#Building-Styles-Summary
2.2 减少显示的栏位长度

这边你一样可以通过pd.set_option函数来限制Titanic数据集里头Name栏位的显示长度:

from IPython.display import display
print("display.max_colwidth预设值:",pd.get_option("display.max_colwidth"))
#使用预设设定来显示DataFrame
df=pd.read_csv('https://bit.ly/kaggletrain')
display(df.head(3))
图片.png
print("注意Name栏位的长度被改变了:")
#定制化显示
pd.set_option("display.max_colwidth",10)
df.head(3)
图片.png
2.3 改变浮点数显示位数

除了栏位长度以外,你常常会想要改变浮点数(float)显示的小数点位数:

pd.set_option("display.precision",1)
df.head(3)
图片.png

你会发现Fare栏位现在只显示小数点后一位的数值了。另外注意刚刚设定的max_colwidth是会被套用到所有DataFrame的。因此这个DataFrame的Name栏位显示的宽度还跟上个DataFrame相同:都被缩减了。

想要将所有调整过的设定初始化,可以执行:

pd.reset_option("all")

其他常用的options 包含:

max_rows
max_columns
date_yearfirst
等等。执行pd.describe_option()可以显示所有可供使用的options,但如果你是在Jupyter notebook内使用pandas的话,我推荐直接在set_option函式的括号里输入Shift+ tab显示所有选项。

2.4 为特定DataFrame加点样式

pd.set_option函数在你想要把某些显示设定套用到所有 DataFrames时很好用,不过很多时候你会想要让不同DataFrame有不同的显示设定或样式(styling)。

比方说针对下面这个只有10笔数据的DataFrame,你想要跟上一节一样把Fare栏位弄成只有小数点后一位,但又不想影响到其他DataFrame或是其他栏位:

#随机抽样10笔数据来做styling
df_sample=df.sample(n=10,random_state=9527).drop('Name',axis=1)
df_sample.Age.fillna(int(df.Age.mean()),inplace=True)
df_sample
图片.png

这时候你可以使用pandas Styler底下的format函数来做到这件事情:

一个典型chain pandas函式的例子

df_sample.style.format('{:.1f}',subset='Fare').set_caption('五颜六色数据集').hide_index().bar('Age',vmin=0).
highlight_max('Survived').
background_gradient('Greens',subset='Fare').highlight_null()
图片.png

如果你从来没有用过df.style,这应该是你这辈子看过最缤纷的DataFrame。
从上而下,上述代码对此DataFrame 做了以下styling:

(1)将Fare栏位的数值显示限制到小数后第一位
(2)添加一个标题辅助说明
(3)隐藏索引(注意最左边!)
(4)将Age栏位依数值大小画条状图
(5)将Survived最大的值highlight
(6)将Fare栏位依数值画绿色的colormap
(7)将整个DataFrame 的空值显示为红色
pd.DataFrame.style会回传一个Styler,你已经看到除了format函数以外,还有很多其他函数可以让你为DataFrame添加样式。使用format函数的最大好处是你不需要用像是round等函数去修改实际数值,而只是改变呈现结果而已。

熟悉styling技巧能让你不需画图就能轻松与他人分享简单的分析结果,也能凸显你想让他们关注的事物。「小提醒」:为了让你能一次掌握常用函数,我把能加的样式都加了,实际上你应该思考什么视觉样式是必要的,而不是盲目地添加样式。

相关文章

网友评论

    本文标题:酷炫极了!!!Pandas定制化DataFrame样式显示设定

    本文链接:https://www.haomeiwen.com/subject/bcylvhtx.html