熊貓來了 - Pandas
以下內容為於蔡炎龍老師之-"用電腦計算你的生活4"投影片
ipython 內請盡量不要使用以下兩種方式,容易造成混淆以及函式混亂,比方說: numpy 與 random 都有 randint 這樣的函式
- %pylab inline
- from module import * / import module 反而應該多用 import module as nickname
為什麼要用pandas
簡單來說就是把Excel的表格觀念丟到Python來,透過 pandas 讓 python 轉化在Excel的操作。 透過Pandas的函式做簡單的處理,例如欄位的加總、分群、樞紐分析表、小計、畫折線圖、圓餅圖等等…
DataFrame 是什麼
在 pandas 裡面的一種資料型態,可以把他想像成 python dictionary ,對應Excel,每一欄的標題相當於 keys() ,而該欄的每個數據則以 list呈現
import pandas as pd
d = {"col-1":[1, 2, 3], "col-2":[4, 5, 6]}
df = pd.DataFrame(data = d)
print(df)
>>>
col-1 col-2
0 1 4
1 2 5
2 3 6
讀入一個檔案
讀入 CSV
mydata = pd.read_csv('filename.csv')
讀入 Excel
mydata = pd.read_excel('filename.xls', 'sheetname')
簡單列出檔案
DataFrame 會自動幫每一筆資料加入 index ,如下面所示
mydata.head()
>>>
姓名 國文 英文 數學 自然 社會
0 劉俊安 9 10 15 10 13
1 胡玉華 10 10 10 8 9
2 黃淑婷 13 15 8 11 14
3 陳上紫 10 10 8 9 14
4 崔靜成 13 12 14 12 13
如果需要看看 pandas 裡面各欄資料
mydata["姓名"]
mydata["國文"]
畫圖
mydata['國文'].plot()
mydata['國文'].hist()
加一行資料
mydata["結果"] = "錄取"
mydata.head()
>>>
姓名 國文 英文 數學 自然 社會 結果
0 劉俊安 9 10 15 10 13 錄取
1 胡玉華 10 10 10 8 9 錄取
2 黃淑婷 13 15 8 11 14 錄取
3 陳上紫 10 10 8 9 14 錄取
4 崔靜成 13 12 14 12 13 錄取
可以任選其中幾欄來顯示
select = mydata[["國文", "英文", "結果"]]
select.head()
>>>
國文 英文 結果
0 9 10 錄取
1 10 10 錄取
2 13 15 錄取
3 10 10 錄取
4 13 12 錄取
任選其中幾列
mydata[1:3]
>>>
姓名 國文 英文 數學 自然 社會 結果
1 胡玉華 10 10 10 8 9 錄取
2 黃淑婷 13 15 8 11 14 錄取
mydata.ix[1]
>>>
姓名 胡玉華
國文 10
英文 10
數學 10
自然 8
社會 9
結果 錄取
依條件篩選
mydata.loc[(mydata["數學"] == 15) & (mydata["英文"] > 12)]
>>>
姓名 國文 英文 數學 自然 社會 結果
36 詹威德 12 13 15 10 14 錄取
70 葉儀依 9 13 15 8 14 錄取
73 吳志遠 13 15 15 8 8 錄取
83 李士賢 10 14 15 13 13 錄取
基本統計運算
mydata.mean()
mydata.std()
mydata.describe()
>>>
國文 英文 數學 自然 社會
count 100.000000 100.000000 100.000000 100.00000 100.00000
mean 11.390000 11.380000 11.570000 11.03000 11.83000
std 2.196853 2.273164 2.310516 2.21772 2.48655
min 8.000000 8.000000 8.000000 8.00000 8.00000
25% 9.000000 9.000000 10.000000 9.00000 9.00000
50% 11.000000 11.000000 11.000000 11.00000 12.00000
75% 13.000000 13.000000 14.000000 13.00000 14.00000
max 15.000000 15.000000 15.000000 15.00000 15.00000