美文网首页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