像RStudio一樣查看Python的Dataframe —— Qgrid

因為我是從 R 跳到 Python 的使用者,R 搭配 RStudio 有很多好用的資料處理操作,其中之一就是可以直接視覺化瀏覽 dataframe,操作 filter 等。其實 Python 也是可以做到這一點的,這就是本篇要介紹的主角——**Qgrid**。

Qgrid

Qgrid 是一個可以用互動的方式來操作 Dataframe 的一個套件。目前主要優點有以下二點:

  1. 直接用點選的方式做到篩選、排序、甚至是更改 cell 的值。
  2. 做 EDA 時可以看到整個 Dataframe 的全貌,而不是用 … 的方式來顯示,且讀取速度很快。

有興趣的話讓我們開始吧!

安裝 Qgrid

基本上依據官方文檔就可以順利安裝了,基本上不外乎就是 pip 及 conda 兩種管道。

1
2
3
4
5
6
# pip 安裝方式
pip install qgrid
jupyter nbextension enable --py --sys-prefix qgrid

# conda 安裝方式
conda install qgrid -c conda-forge

官網還有提及需安裝 Jupyterlab ,我試過使用 Jupyter notebook 也是可以運行的,這裡是否要安裝 Jupyterlab 就依自己習慣即可。

直接調整 Dataframe

一開始,我們先建立所需要的 Dataframe 資料來做測試,為了之後測試效能,我們把數量調大一點。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 載入所需套件
import qgrid
import pandas as pd
import numpy as np

# 為了讓結果相同,設定種子以及資料數量
np.random.seed(1)
nrow = 1000000

# 建立 Dataframe
df = pd.DataFrame({'Index': range(nrow),
'Sex': np.random.choice(['M', 'F'], nrow),
'Age': np.random.randint(12, 56, nrow),
'Height': np.round(np.random.random(nrow),3)*30+160,
'Weight': np.round(np.random.random(nrow),3)*30+55,
'Tag': np.random.choice([True, False], nrow)})
df

圖片

可以看到基本上在 Jupyter notebook,只要不特地去設定 pandas 的 display 值,過多的資料都會用 … 帶過。接下來我們想用 Qgrid 來接管這個 Datafram,我們只要下以下語法就好。

1
2
qgrid_widget = qgrid.show_grid(df, show_toolbar=True)
qgrid_widget

我們可以直接在 Dataframe 上排序、篩選(數值、類別、布林)資料。

圖片

甚至可以直接更改 Dataframe 的值。

圖片

除此之外,瀏覽資料的速度也是相當迅速的。

圖片

如果想要擷取這些更動過的資料,可以下以下指令。

1
qgrid_widget.get_changed_df()

圖片

擷取的資料保留了排序、篩選及我們更動後的資料,這對想直接動手調整資料的人來說相當方便。

後記

Qgrid 還在不斷的更新及維護,舉例來說,最近更新的版本,可以在修改資料後直接反應結果在圖形上。官方舉例的文件中用數據畫了迴歸線及資料點的圖形,在更改 Qgrid 的資料時,圖形會即時更動。其實語法也不會很難,但因我們在這討論此套件如何幫助我們在 EDA 流程中更好掌握資料,有興趣的人就自己再看一下官方文檔吧!

參考資料

  1. Easily edit DataFrames within JupyterLab
  2. Qgrid Github