Pandas(不是熊貓)是 Python 裡很常用來做資料分析、處理和操作的 library。我們可以直接通過它內建的方法,將一個 .csv 或資料庫,並把它變成很像 excel 的東東(data frame)。那我們就趕快來進入主題吧~

安裝環境

安裝指令:

pip install pandas

我們在這次的教學環境會使用 Jupyter Notebook 來操作。如果在 VSCode 或者 Terminal 上操作的話有一些指令可能需要再包到 print() 裡才可以看到哦~

read_filetype()

我們通常在做資料分析的時候,會比較常碰到 .csv(comma-separated values) 檔。如果有興趣玩玩看一些 data 的話,可以到 kaggle 去申請一個帳號來玩玩。但為了這個教學比較有實作的感覺,我們就先到這裡下載很有名的鐵達尼號的資料集~

感謝 Vanderbilt 大學無私貢獻

先將我們剛才下載的 titanic3.csv 放到跟我們程式碼同樣一個資料夾。我們再透過 pd.read_csv() 讀取 .csv 檔裡的資料成一個 data frame 物件。並且,我們可以透過 data frame 的內建方法 head() 來印出這個 data frame 裡面的前 5 筆資料。

import pandas as pd
df = pd.read_csv('titanic3.csv')
df.head()

我們基本上可以透過很多不同資料形態獲取資料,這裡我們的資料會是用 .csv,因此會用 pd.read_csv() 的方法。Pandas 還可以讀取一些像是 numpy,sql 之類的可以自己看看 documentation 哦~ 我們上面的輸出大概會長這樣...

drop, isnull, dropna, fillna

我們基本上可以從這個表中發現我們其實有很多不需要用到的 column 如:p_class,name之類的。那我們現在來對我們的 data frame 動一些手腳。我們可以直接將所要的 column 設成一個 list,並將我們所需要的欄位帶入到另一個 data frame。或者我們也可以直接用 drop() 的 method,並且對 column (axis=1)裡面叫 'name' 的欄位刪除。

col=['survived','name','pclass' ,'sex', 'age', 'sibsp', 'parch', 'fare', 'embarked']
df = df[col]
df = df.drop(['name'], axis=1)
df.head()

這裡就順便提一下,基本上在 pandas 裡面選取資料的方式也跟傳統陣列的 indexing 是一樣的,只是我們可以針對 column 的名字去做 query。像我們所寫的 df[col] 所回傳的其實就是所有選取我麼所想要的 column 並且將它回傳出來。

很多時候在做資料分析的時候會發現一些垃圾 null 資料,而通常我們都需要對這些資料做處理。我們可以透過 isnull 來判斷說我們這個資料集裡面是否有這樣的 null 值。而我們可以把這些 null 值刪除掉 df.dropna()/df.dropna(axis=1) (列/欄)或者給予它的一個值 df.fillna(x)。我們這個範例裡就拿它的平均值來當做剩下人的年齡吧~

df[['age']] = df[['age']].fillna(df[['age']].mean())

沒錯,pandas 也有很像 R 裡面的 mean()std() 的內建方法哦~

filter, sort, groupby

記得我剛才有提到說你可以讀取 sql 檔案嗎?當然,這個時候我們也可以對它做一些很像 sql 裡面的處理,像是 filtersortgroupby。要注意的是,groupby 之後會變成一個 generic.groupby 的 object,要用 describe() 才有辦法找出船上有多少 18 歲以上的成年妹子和前20名可以打搶的有錢人(不是...

sort_fee = df.sort_values('fare',ascending=False)
sort_fee.head()
abv_18 = df[df['age']>18]
grp = abv_18.groupby(['sex'])
grp.describe()

append, concat, join

最後,這邊跟大家示範一下當我們有兩組 dataset 的時候,我們可以用 df.append()pd.concat() 的方法來將兩組資料集做合併。要注意的是 append()DataFrame 物件的方法,而 concat()pandas 模組地下的方法哦~

g = {'name':['Anna', 'Charlotte', 'Rose', 'Jean'],
     'al_score':[46,90,87,64],
     'ds_score':[50,91,82,34],
    }
b = {'name':['Ben', 'John', 'Thomas', 'Timothy'],
     'al_score':[77,49,76,34],
     'ds_score':[80,66,64,70],
    }
im = {'im_score':[60,70,65,50,75,64,64,59]}
g_df = pd.DataFrame(g)
b_df = pd.DataFrame(b)
im_df = pd.DataFrame(im)
std_df = g_df.append(b_df,ignore_index=True)
std_df = pd.concat([std_df, im_df], axis=1)
std_df

Pandas 也有像 SQL 一樣概念的 df.join() 方法,但是因為我們不是 SQL 教學,所以大鳥就不多解說了,有需要的話可以自己去看看 pandas 的 documentation。最後送大家一隻可愛小熊貓~

範例程式碼外送(限高大GSuite賬號)

Leave a Reply

Your email address will not be published. Required fields are marked *