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

一、需求背景

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容