楔子
相信在使用 pandas 的時候都遇到過如下情況,當我們打印一個列數或行數比較多的 DataFrame 時,該 DataFrame 不會全部顯示,中間一部分會用省略號代替,舉個栗子:
由於行數比較多,默認情況下不會全部顯示,而是只顯示一部分;至於列也是同理,只不過我們這里的列不多,因此全部顯示了。
而至於到底顯示多少行、多少列,pandas 有着自己的一套選項(option)設置系統,可以幫助我們在遇到不同的數據時靈活調節從而達到最好的效果,設置方式則是通過 pd.set_option 函數實現。當然除了設置顯示的行數、列數之外,我們還可以設置很多其它的屬性,下面來看一下。
注意:使用 pd.set_option 僅僅是在原有數據基礎上優化顯示狀態,並不會對原始數據進行任何修改,我們也隨時可以通過重置選項,將數據恢復成默認顯示狀態。
顯示指定數量的行 / 列
display.max_rows 用於控制 DataFrame 的最大顯示行數,display.max_columns 用於控制 DataFrame 的最大顯示列數。
當你覺得 DataFrame 顯示的行數或列數不合適的時候,就可以通過上面的方式進行設置,並且沒有限制,可以隨時自由調整,增大、減小均可。
但如果我們希望一個 DataFrame 不受最大行數或列數的制約,也就是有多少行就顯示多少行,有多少列就顯示多少列,這個時候該怎么做呢?
但是不建議這么設置,尤其是 display.max_rows,因為一個 DataFrame 的行數可能會很多(百萬行也是很正常的),此時將其全部顯示出來是很費資源的。
設置每列的最大顯示寬度
對於一些內容長度較長的數據,譬如長文本,在查看時過長的部分會使用 ... 簡化顯示,我們可以通過 display.max_colwidth 來設置每列的最大顯示寬度。
同理,我們也可以設置為 None,那么單元格的內容無論多長,都會完整的顯示出來。
修改小數點精度
我們可以設置 DataFrame 在顯示時,浮點數的小數點位數。
注意:這只是顯示的時候保留小數點后三位,但是數據本身還和之前一樣,我們打印一下。
print(df.loc[0, "a"]) # 1.9978488211190717
指定小於某個數的元素顯示為 0
通過 display.chop_threshold 參數我們在不修改原始數據的情況下,指定數據框中絕對值小於閾值的數顯示為 0。
格式化浮點數
通過 display.float_format 參數我們可以設置浮點數的顯示格式,譬如這里我們給浮點數加上 ¥ 前綴並設定保留兩位小數:
設置 info() 方法中非缺失值檢查的行數上限
針對數據框的 info() 方法可以幫助我們查看數據框的一些概覽信息,譬如每一列對應的非缺失值個數。但默認情況下當數據框行數大於 1690784 行時,再查看 info() 信息,會出於計算效率的考慮,而略去缺失值檢查信息。這時我們可以通過設置 display.max_info_rows 參數來提高這個上限:
還原設置
如果我們想將某項設置還原成默認狀態,可以通過 pd.reset_option 來實現。
# 輸出想要還原的選項即可
pd.reset_option("display.max_colwidth")
# 還可以一次性將所有選項都還原成默認狀態
pd.reset_option("all")
# 該方法支持正則,下面表示將 display 開頭的選項都還原成默認狀態
pd.reset_option("^display")
忽略警告
取消 pandas 相關 warning 提示:
pd.set_option("mode.chained_assignment", None)
# 全局取消 warning
# import warnings
# warnings.filterwarnings('ignore')
讓 pandas 支持 LaTex
我們可以讓 DataFrame 中的內容支持 Latex 顯示(需要使用 $$ 包住)
pd.set_option("display.html.use_mathjax",True)
修改默認繪圖引擎
修改 pandas 默認繪圖引擎為 plotly(需要提前安裝好 plotly)
pd.set_option("plotting.backend","plotly")
基於 style 的個性化設置
上面使用 pd.set_option 進行的設置都是全局的,一旦設置,在 notebook 關閉之前一直有效。而通過 df.style.xxx 輸出的數據均是一次性的,並且該方法可以將 DataFrame 展示的更加豐富多彩。
隱藏索引 / 列
通過 df.style.hide_index() 可以在輸出 DataFrame 的時候將索引隱藏起來;通過 df.style.hide_columns() 可以在輸出 DataFrame 的時候將指定的列隱藏起來。
標記缺失值
我們在輸出 DataFrame 的時候也可以將缺失值替換成指定的值。
高亮缺失值
對缺失值高亮顯示:
如果有多個列,我們也可以只對部分列進行高亮顯示。
df.style.highlight_null(null_color="pink", subset=["xx", "yy"])
高亮最大值、最小值
和高亮缺失值類似。
修改字體顏色
將指定的列修改為紅色字體。