# A Little Learning Everyday about Pandas_01-快速認識Pandas(1) ###### `a little learning everyday` `pandas` >每天學一點,一天不要學太多東西,這是楊千教授在課堂上說過的一句話,個人覺得跟賴世雄老師的少就是多,慢就是快有異曲同工之妙。 Pandas,尖端科技的結晶,也是一套資料分析、處理,不可少的工具。而且新的版本也已經跟matplotlib有了深度的結合,你可以直接在Pandas上可視化你的資料,非常便利。 雖然之前已經有看過[課程](https://github.com/shaoeChen/pandas_foundation),不過版本愈來愈新,還是需要再找時間重新複習一下。每天學一點,記錄一點,總是可以再重溫這整個套件的常用功能。 做機器學習除了演算法之外就是資料預處理以及資料清洗,這些部份你就可以利用Pandas來做,不難,難的在於你要做什麼還有你應該做什麼。至於資料的取得就現在來說已經不是什麼難事了,隨便找一個公開資料就開始練習吧。 ## 載入資料 載入pandas的方式,就跟載入numpy一樣,都是一個約定俗成: ```python= import pandas as pd ``` 如果我們想要載入一個資料集,那可以利用`pd.read_xxx`,很明顯的這個`xxx`就是看你的格式是什麼,以我這邊範例要用的是csv檔,那就: ```python= df = pd.read_csv('https://dts.twse.com.tw/opendata/t187ap14_L.csv') ``` 你可以參考[官方文件](https://pandas.pydata.org/pandas-docs/stable/reference/io.html)取得更多的io方法。 ## 確認資料 載入資料之後必需先確認資料是否正確的載入,這時候有三種常見方式可以處理,那就是`df.head(5)`、`df.tile(5)`、`df.sample(5)`,這三種方法分別是取前五筆、取後五筆、隨機取五筆:  上圖我做的是隨機取五筆,當你取的到資料就意味著你的資料載入至少是正確的。 接下來也許你會希望可以知道整個資料集究竟有多少筆資料,常見的作法我們是可以直接使用`len(df)`,潮一點的當然也可以使用`df.shape`,採用`df.shape`的好處在於你可以直接知道你的資料維度,也就是總共幾筆,有幾個欄位(或者你也想稱之為特徵)。 在確認資料維度之後,也許你會希望知道各欄位的型別,`df.dtypes`是個不錯的作法,但是利用`df.info()`得到的資訊更為全面,包含型別、是否存在空值以及記憶體用量等資訊皆有:  當然你一定也知道還有一個函數為`df.describe()`,這函數主要是提供四分位數、中位數、平均值等資訊,想當然,只針對數值型別的欄位會有效果,因此你也可以發現上下兩張圖的欄位數是不一樣多得:  不過如果你只是單純的需要知道有幾個欄位的話,你就直接利用`df.columns`就可以取得所有欄位名稱了。 ## 選取資料 pandas在選取資料的部份還蠻直觀的,就跟你在使用dict一樣,假設我們選取『年度』這個欄位的所有資料,只需要`df['年度']`:  它回傳的是個`series`型別的物件,上圖第一個column你看到的就是index,第二個column就是年度的值。 當然你也可以一次選擇多個欄位,也許你會想要`df[['xxx', 'xxx']]`的方式,但是我個人是比較偏愛這樣: ```python= _cols = ['年度', '季別'] df[_cols] ``` 我們剛剛說到可以利用`df.shape`來看資料維度,所以你也可以利用`df.loc`與`df.iloc`來做像numpy一樣的維度選取,差別在於`df.loc`是指定欄位,而`df.iloc`是指定索引: <center class='half'> <img src='https://hackmd.io/_uploads/Sym9o92P9.png' width='300'/> <img src='https://hackmd.io/_uploads/H1gss53v5.png' width='300'/> </center> 上面兩張圖可以得到一樣的結果,但是使用的語法是不一樣的。 不指定欄位只想取前100筆的資料的話,除了用`df.head(100)`之外,你也可以採用`df[0:100]`的方式,結果是一樣的。 ### 設置索引選取 剛剛我們提到,呈現的第一個column代表的是索引,這當然可以指定,我們可以利用`df.set_index('產業別', inplace=True)`來指定,`inplace=True`代表的意義就是『確認改變』,也就是你的這個DataFrame的索引就會確實的變成你所指定的欄位,沒有加這個option的話,充其量就是給你看一下改變之後的結果。 這時候我們再回頭執行`df.loc['水泥工業', _cols]`,這個`_cols`就是上面我設置的欄位,可以得到指定索引後的結果:  你說,那我們是否可以指定多個索引?這是肯定的,觀念一樣,只需要用一個list塞入你想指定的索引就行,就像這樣`df.loc[['水泥工業', '紡織纖維'], _cols]`。 當你希望取消索引設置的時候,不用客氣,直接`df.reset_index(inplace=True)`,不要忘了`inplace=True` ### 設置條件選取 有些時候我們希望可以有條件的選取資料,當然你可以給一個很直接的語法,像是`df[df['產業別']=='水泥工業']`,只是我的習慣還是一樣會拆開處理,像這樣: ```python= mask = df['產業別']=='水泥工業' df[mask] ``` 對我來說這樣比較直觀就是,因為多個條件的話我的作法看起來可以比較清楚一點,個人自我感覺良好就是:  ## 結論 今天學到的雖然少少的,但是少就是多,慢就是快。我們至少已經知道怎麼載入資料,也知道怎麼選取資料,當然還有很多,像是群組、排序、還有怎麼可視化資料,但是不急,一天不要學太多東西,每天只要學一點,多練習才是重點,有個觀念在,以後遇到問題至少可以知道怎麼處理。
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up