---
# System prepended metadata

title: A Little Learning Everyday about Pandas_02-快速認識Pandas(2)

---

# A Little Learning Everyday about Pandas_02-快速認識Pandas(2)
###### `a little learning everyday` `pandas`

>每天學一點，一天不要學太多東西，這是楊千教授在課堂上說過的一句話，個人覺得跟賴世雄老師的少就是多，慢就是快有異曲同工之妙。

上次我們已經談到如何選取DataFrame裡面的資料，那是一些非常直觀的操作方式。這次就要來快速的認識其它的功能，像是排序、群組，以及如何利用pandas來做可視化的呈現。

## 排序
排序是操作資料一定會有的需求，操作起來跟sql還蠻類似的，承接上一篇的範例，我們可以直接`df.sort_values(by='公司代號', ascending=False)`這樣的表達式來處理，這意味著我們用`公司代號`這欄位來排序，然後是由大到小：
![](https://hackmd.io/_uploads/BJV5s-Wu9.png)

不過如果需求操作多個欄位的話，`by`的部份給定的就要變成是一個list，像這樣`df.sort_values(by=['產業別', '公司代號'], ascending=[True, False])`，就可以得到一個先根據產業別，再根據公司代號排序的結果。


## 群組
基本上，群組就跟sql的group by的意義很像就是了，如果你也會一些些sql的語法，那用這個肯定是沒有問題，只差在語法的表示不同。

假設我們希望可以根據產業別來做一些聚合函數的操作，我們可以直接透過`df.groupby('產業別')`：
![](https://hackmd.io/_uploads/SJNumgGd5.png)

上圖看的出來，回傳的是一個物件，但接續著只要把你心中想的也給接上去，`df.groupby('產業別').sum()`，就可以得到你想要的結果：
![](https://hackmd.io/_uploads/r1yb4eMdc.png)

別太在意我的`head()`，只是單純的不想要圖太大張而以。能做的當然不是只有這樣，不過既然是快速認識，就只要先知道有這麼一個功能就可以了，我知道也許你也想知道能不能針對某一個欄位做某一種聚合函數的操作，這當然是可以的，`df.groupby('產業別').agg({'營業收入': 'sum'})`。

## 繪圖
Pandas在新的版本中很好的結合的matplotlib，因此如果你的圖不是很要求的話，倒是可以很快速的直接在DataFrame直接處理，語法也是很直觀，`df.groupby('產業別').sum().plot()`，就這麼簡單，這樣就一個折線圖，`df.groupby('產業別').sum().plot().bar()`，這樣又變成一個柱狀圖，橫的也行，`df.groupby('產業別').sum().plot().barh()`，很簡單吧？

![](https://hackmd.io/_uploads/B1w6bCR_5.png)


沒意外的話，你也會遇到中文無法呈現的問題，其實簡單排除的話就是直接修正matplotlib的設定：
```python=
matplotlib.rcParams['font.sans-serif'] = ['Microsoft JhengHei']
matplotlib.rcParams['font.family']='sans-serif'
```

`Microsoft JhengHei`是微軟正黑體，我有試著直接打微軟正黑體，不過失敗了，哈哈。
## 結論
兩篇簡介應該已經大致理解到這隻功夫熊貓的厲害了，它的潛力十足，通常我是這樣覺得，有需要的時候你自然就會去找答案，所以至少要先知道有什麼功能，能做什麼，以後有需求的時候才會有方向可以尋找。


