Python學習筆記: 系所簡稱檢核判斷系所正確名稱

學生在填寫資料時,常常以系所簡稱來填寫。本段程式主要以系所簡稱比對系所正確名稱,代入系所正確名稱

本案以中原大學系所為範例

In [1]:

import pandas as pd

# 讀取系所簡稱資料
df1 = pd.read_excel('110624_系所簡稱_判斷系所正確名稱.xlsx', sheet_name='系所簡稱')
print(len(df1))
print(df1.columns)
print(df1.info())
df1

33 Index(['系所簡稱'], dtype='object') <class 'pandas.core.frame.DataFrame'> RangeIndex: 33 entries, 0 to 32 Data columns (total 1 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 系所簡稱 33 non-null object dtypes: object(1) memory usage: 392.0+ bytes None

Out[1]:

In [2]:

# 讀取系所正確名稱資料
df2 = pd.read_excel('110624_系所簡稱_判斷系所正確名稱.xlsx', sheet_name='系所名稱')
print(len(df2))
print(df2.columns)
print(df2.info())
df2

37 Index(['系所名稱'], dtype='object') <class 'pandas.core.frame.DataFrame'> RangeIndex: 37 entries, 0 to 36 Data columns (total 1 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 系所名稱 37 non-null object dtypes: object(1) memory usage: 424.0+ bytes None

Out[2]:

Property 系所名稱
0 師資培育中心
1 通識教育中心
2 機械工程學系
3 工業與系統工程學系
4 化學系
5 心理學系
6 環境工程學系
7 國際商學學士學位學程
8 企業管理學系
9 財務金融學系
10 中原大學與美國天普大學商學管理雙學士學位學程
11 應用外國語文學系
12 電機工程學系
13 財經法律學系
14 特殊教育學系
15 生物醫學工程學系
16 電子工程學系
17 資訊工程學系
18 國際經營與貿易學系
19 會計學系
20 資訊管理學系
21 建築學系
22 室內設計學系
23 商業設計學系
24 設計學士原住民專班
25 地景建築學系
26 應用華語文學系
27 應用數學系
28 化學工程學系
29 土木工程學系
30 電機資訊學院人工智慧應用學士學位學程
31 中原大學美國威大密爾瓦基分校電機與資訊工程雙學士學位學程
32 物理學系
33 生物科技學系
34 全校外籍生大一不分系學士學位學程
35 人文與教育學院學士學位學程
36 電機資訊學院學士班

In [3]:

final = [] # 儲存最後檢核結果for i in df1['系所簡稱']:
    target_count = 0
    target = []
    for j in df2['系所名稱']:
        match = set(list(i)) & set(list(j)) # 比對系所簡稱和系所名稱後,找出相同的字元
        temp_target = j
        temp_count = len(match)
        if temp_count == 0 : # 如果比對後,完全不相同,就找一個系所名稱繼續做
            continue
        elif temp_count > target_count: # 如果比對後,相同的字元數大於原先target中的字元數,則target內容被取代
            target = [temp_target]
            target_count = temp_count
        elif temp_count == target_count: # 如果比對後,相同的字元數與原先target中的字元數一樣,則target內容再增加temp_target的內容
            target.append(temp_target)
            final.append(target) # 把target的內容新增到final中print(final)

Out[3]:

[['師資培育中心'], ['通識教育中心'], ['機械工程學系'], ['機械工程學系', '工業與系統工程學系', '環境工程學系', '電機工程學系', '生物醫學工程學系', '電子工程學系', '資訊工程學系', '化學工程學系', '土木工程學系'], ['心理學系'], ['環境工程學系'], ['國際商學學士學位學程'], ['企業管理學系'], ['財務金融學系'], ['中原大學與美國天普大學商學管理雙學士學位學程'], ['應用外國語文學系'], ['電機工程學系'], ['財經法律學系'], ['特殊教育學系'], ['生物醫學工程學系'], ['電子工程學系'], ['資訊工程學系'], ['國際經營與貿易學系'], ['會計學系'], ['資訊管理學系'], ['室內設計學系'], ['商業設計學系'], ['設計學士原住民專班'], ['應用華語文學系'], ['應用數學系'], ['化學工程學系'], ['土木工程學系'], ['中原大學美國威大密爾瓦基分校電機與資訊工程雙學士學位學程'], ['物理學系'], ['生物科技學系'], ['全校外籍生大一不分系學士學位學程'], ['人文與教育學院學士學位學程'], ['電機資訊學院學士班']]

In [4]:

df1['檢核判斷'] = [','.join(map(str, l)) for l in final] # 將final的list轉換成df1['檢核判斷']

df1

Out[4]:

Property 系所簡稱 檢核判斷
0 師培中心 師資培育中心
1 通識中心 通識教育中心
2 機械系 機械工程學系
3 工工系 機械工程學系,工業與系統工程學系,環境工程學系,電機工程學系,生物醫學工程學系,電子工程學系…
4 心理系 心理學系
5 環工系 環境工程學系
6 國際學程 國際商學學士學位學程
7 企管系 企業管理學系
8 財金系 財務金融學系
9 天普學程 中原大學與美國天普大學商學管理雙學士學位學程
10 外文系 應用外國語文學系
11 電機系 電機工程學系
12 財法系 財經法律學系
13 特教系 特殊教育學系
14 生醫系 生物醫學工程學系
15 電子系 電子工程學系
16 資工系 資訊工程學系
17 國貿系 國際經營與貿易學系
18 會計系 會計學系
19 資管系 資訊管理學系
20 室內設計系 室內設計學系
21 商設系 商業設計學系
22 設計原民班 設計學士原住民專班
23 華語系 應用華語文學系
24 應數系 應用數學系
25 化工系 化學工程學系
26 土木系 土木工程學系
27 密爾瓦基學程 中原大學美國威大密爾瓦基分校電機與資訊工程雙學士學位學程
28 物理系 物理學系
29 生技系 生物科技學系
30 不分系 全校外籍生大一不分系學士學位學程
31 人文與教育學程 人文與教育學院學士學位學程
32 電資學士班 電機資訊學院學士班

In [5]:

df1.loc[df1['檢核判斷'].str.split(',').apply(len)>3, '檢核判斷'] = "" # 如果df1['檢核判斷']中超過3個遏號,表示太多一樣,將內容取代為NaN,未來採人工判斷

df1

Out[5]:

Property 系所簡稱 檢核判斷
0 師培中心 師資培育中心
1 通識中心 通識教育中心
2 機械系 機械工程學系
3 工工系
4 心理系 心理學系
5 環工系 環境工程學系
6 國際學程 國際商學學士學位學程
7 企管系 企業管理學系
8 財金系 財務金融學系
9 天普學程 中原大學與美國天普大學商學管理雙學士學位學程
10 外文系 應用外國語文學系
11 電機系 電機工程學系
12 財法系 財經法律學系
13 特教系 特殊教育學系
14 生醫系 生物醫學工程學系
15 電子系 電子工程學系
16 資工系 資訊工程學系
17 國貿系 國際經營與貿易學系
18 會計系 會計學系
19 資管系 資訊管理學系
20 室內設計系 室內設計學系
21 商設系 商業設計學系
22 設計原民班 設計學士原住民專班
23 華語系 應用華語文學系
24 應數系 應用數學系
25 化工系 化學工程學系
26 土木系 土木工程學系
27 密爾瓦基學程 中原大學美國威大密爾瓦基分校電機與資訊工程雙學士學位學程
28 物理系 物理學系
29 生技系 生物科技學系
30 不分系 全校外籍生大一不分系學士學位學程
31 人文與教育學程 人文與教育學院學士學位學程
32 電資學士班 電機資訊學院學士班

In [ ]:

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *