import pandas as pd import os path = os.getcwd()
"""相關檔案可參考以下網址下載:https://depart.moe.edu.tw/ED4500/News_Content.aspx?n=5A930C32CC6C3818&sms=91B3AAE8C6388B96&s=596D9D77281BE257"""# List files: files = os.listdir(path)# 印出目錄下所有檔案名稱
print(files)
# 選擇檔案名稱第4-10碼為「student」的檔案
files_xls = [f for f in files if f[4:11] == 'student'] print(files_xls)
['105_student.xls', '106_student.xls', '107_student.xls', '108_student.xls']
In [2]:
df = pd.DataFrame() for f in files_xls:
# 批次讀入excel檔,從第3列開始
data = pd.read_excel(f, skiprows = 2)
# 新增「學年」欄位
data['學年'] = int(f[:3]) df = df.append(data)df
Out[2]:
學校代碼 | 學校名稱 | 日間∕進修別 | 等級別 | 總計 | 男生計 | 女生計 | 一年級男生 | 一年級女生 | 二年級男生 | … | 五年級女生 | 六年級男生 | 六年級女生 | 七年級男生 | 七年級女生 | 延修生男生 | 延修生女生 | 縣市名稱 | 體系別 | 學年 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 國立政治大學 | D 日 | D 博士 | 981 | 605 | 376 | 113 | 66 | 91 | … | 48 | 84 | 40 | 64 | 33 | – | – | 30 臺北市 | 1 一般 | 105 |
1 | 1 | 國立政治大學 | D 日 | M 碩士 | 3962 | 1808 | 2154 | 617 | 755 | 622 | … | – | – | – | – | – | – | – | 30 臺北市 | 1 一般 | 105 |
2 | 1 | 國立政治大學 | D 日 | B 學士 | 9711 | 3912 | 5799 | 872 | 1347 | 1017 | … | – | – | – | – | – | 327 | 455 | 30 臺北市 | 1 一般 | 105 |
3 | 1 | 國立政治大學 | N 職 | M 碩士 | 1718 | 882 | 836 | 281 | 297 | 261 | … | 30 | – | – | – | – | – | – | 30 臺北市 | 1 一般 | 105 |
4 | 2 | 國立清華大學 | D 日 | D 博士 | 1645 | 1264 | 381 | 235 | 83 | 205 | … | 46 | 125 | 43 | 173 | 54 | – | – | 18 新竹市 | 1 一般 | 105 |
… | … | … | … | … | … | … | … | … | … | … | … | … | … | … | … | … | … | … | … | … | … |
789 | 1293 | 崇仁醫護管理專科學校 | D 日 | 5 五專 | 3330 | 410 | 2920 | 81 | 584 | 87 | … | 564 | – | – | – | – | 11 | 44 | 10 嘉義縣 | 2 技職 | 108 |
790 | 3002 | 臺北市立大學 | D 日 | D 博士 | 234 | 101 | 133 | 14 | 19 | 14 | … | 15 | 10 | 17 | 19 | 30 | – | – | 30 臺北市 | 1 一般 | 108 |
791 | 3002 | 臺北市立大學 | D 日 | M 碩士 | 1215 | 420 | 795 | 156 | 242 | 105 | … | 37 | 12 | 27 | – | – | – | – | 30 臺北市 | 1 一般 | 108 |
792 | 3002 | 臺北市立大學 | D 日 | B 學士 | 5270 | 2335 | 2935 | 569 | 738 | 527 | … | – | – | – | – | – | 166 | 140 | 30 臺北市 | 1 一般 | 108 |
793 | 3002 | 臺北市立大學 | N 職 | M 碩士 | 1090 | 298 | 792 | 107 | 274 | 87 | … | 44 | 15 | 25 | – | – | – | – | 30 臺北市 | 1 一般 | 108 |
3295 rows × 26 columns
In [3]:
df = df[['學校代碼', '學年', '學校名稱', '等級別', '總計']] df.head()
Out[3]:
學校代碼 | 學年 | 學校名稱 | 等級別 | 總計 | |
---|---|---|---|---|---|
0 | 1 | 105 | 國立政治大學 | D 博士 | 981 |
1 | 1 | 105 | 國立政治大學 | M 碩士 | 3962 |
2 | 1 | 105 | 國立政治大學 | B 學士 | 9711 |
3 | 1 | 105 | 國立政治大學 | M 碩士 | 1718 |
4 | 2 | 105 | 國立清華大學 | D 博士 | 1645 |
In [4]:
df = df.groupby(['學校代碼', '學校名稱', '學年']).sum() df
Out[4]:
總計 | |||
---|---|---|---|
學校代碼 | 學校名稱 | 學年 | |
1 | 國立政治大學 | 105 | 16372 |
106 | 16353 | ||
107 | 16343 | ||
108 | 16390 | ||
2 | 國立清華大學 | 105 | 12466 |
… | … | … | … |
1293 | 崇仁醫護管理專科學校 | 108 | 3330 |
3002 | 臺北市立大學 | 105 | 7631 |
106 | 7675 | ||
107 | 7774 | ||
108 | 7809 |
620 rows × 1 columns
In [5]:
df = df.unstack(2) df
Out[5]:
總計 | |||||
---|---|---|---|---|---|
學年 | 105 | 106 | 107 | 108 | |
學校代碼 | 學校名稱 | ||||
1 | 國立政治大學 | 16372.0 | 16353.0 | 16343.0 | 16390.0 |
2 | 國立清華大學 | 12466.0 | 16664.0 | 16657.0 | 16678.0 |
3 | 國立臺灣大學 | 31783.0 | 31802.0 | 31745.0 | 31945.0 |
4 | 國立臺灣師範大學 | 15307.0 | 15426.0 | 15582.0 | 15716.0 |
5 | 國立成功大學 | 21119.0 | 21252.0 | 21276.0 | 21456.0 |
… | … | … | … | … | … |
1290 | 崇仁醫護管理專科學校 | 3478.0 | 3503.0 | NaN | NaN |
1291 | 聖母醫護管理專科學校 | 3525.0 | 3155.0 | 2777.0 | 2561.0 |
1292 | 新生醫護管理專科學校 | 6022.0 | 6024.0 | 6058.0 | 6031.0 |
1293 | 崇仁醫護管理專科學校 | NaN | NaN | 3392.0 | 3330.0 |
3002 | 臺北市立大學 | 7631.0 | 7675.0 | 7774.0 | 7809.0 |
164 rows × 4 columns
In [ ]: