#----------------------------------------------------- #範例16-10:進階排序:有函數的排序 #https://www.w3schools.com/python/pandas/ref_df_sort_values.asp #https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.sort_values.html #(1)檔案:學生成績檔(excel) #score4.xlsx,裡面的name有大寫,小寫 #https://acupun.site/lecture/python/py_example/chp16/score4.xlsx #(2)重點1: #自訂排序的函數用法:key = 函數名稱,不需要加上() #list的函數排序:list.sort(key=函數) #dataFrame的函數排序:df.sort_values(key=函數) #(3)重點2: #key=函數,的函數寫法,有2種 #(A)def 函數myf(參數a): # return a.str.lower() #(B)將一行return函數寫成lambda a:a.str.lower() #------------------------------ #1.練習1:list的進階排序(結合函數(系統函數,或是自訂函數) #--------------------- #(1)依照文字母排序 #語法:list.sort(reverse=True|False, key=myFunc) #key:可選。指定排序標準的函數。 #a1 = ["tom","John","bo","mikewang","jolin","Michael"] print("1-1.依照字母排序(先大寫,後小寫)=\n") #--------------------- #(2)依照文字長度排序:key = myLen,............def myLen(item): #注意:key=函數名稱,不需要加上() print() #a1.sort(key = myLen) print("1-2.依照文字長度排序=\n") #--------------------- #(3)依照文字母排序(不管大小寫):key = str.lower print() #a1.sort(key = str.lower) #注意:key=str.lower,全部轉小寫,不需要加上() print("1-3.依照文字母排序(不管大小寫)=\n") #------------------------------ #2.練習2:讀取excel檔案的進階排序(結合自訂def函數) #--------------------- #(1)依照文字母排序,先大寫,後小寫(score4.xlsx,裡面的name有大寫,小寫) #import pandas as pd #df = pd.read_excel("https://acupun.site/lecture/python/py_example/chp16/score4.xlsx","mad3a") print() print("2-1.依照name字母排序(先大寫,後小寫)=\n") print() #--------------------- #(2)依照文字母排序(不管大小寫):df.sort_values(by="name", key=myLetter) print() #--------------------- #(3)依照文字長度排序= df.sort_values(by='name', key=myLen2) print() print("2-3.依照文字長度排序=\n") #------------------------------ #3.練習3:讀取excel檔案的進階排序(結合自訂lambda函數) #--------------------- #重點1:什麼是lambda函數:lambda就是一個有return的function的簡單寫法 #重點2:若函數只有一行,2個參數a,b,傳回a+b,可轉換成lambda函數寫法:lambda a,b:a+b #----------------------------------------------------- #(1)依照文字母排序,先大寫,後小寫(score4.xlsx,裡面的name有大寫,小寫) #import pandas as pd #df = pd.read_excel("https://acupun.site/lecture/python/py_example/chp16/score4.xlsx","mad3a") print() print("3-1.依照name字母排序(先大寫,後小寫)=\n") print() #--------------------- #(2)依照文字母排序(不管大小寫):df.sort_values(by="name", key=lambda a:a.str.lower()) print() print("3-2.依照文字母排序(不管大小寫=\n") #--------------------- #(3)依照文字長度排序= df.sort_values(by='name', key=lambda a:a.str.len() print() print("3-3.依照文字長度排序=\n") #-------------------------------------------------------------------- #-------------------------------------------------------------------- #範例16-10:進階排序:有函數的排序 #https://www.w3schools.com/python/pandas/ref_df_sort_values.asp #https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.sort_values.html #(1)檔案:學生成績檔(excel) #score4.xlsx,裡面的name有大寫,小寫 #https://acupun.site/lecture/python/py_example/chp16/score4.xlsx #(2)重點1: #自訂排序的函數用法:key = 函數名稱,不需要加上() #list的函數排序:list.sort(key=函數) #dataFrame的函數排序:df.sort_values(key=函數) #(3)重點2: #key=函數,的函數寫法,有2種 #(A)def 函數myf(參數a): # return a.str.lower() #(B)將一行return函數寫成lambda a:a.str.lower() #------------------------------ #1.練習1:list的進階排序(結合函數(系統函數,或是自訂函數) #--------------------- #(1)依照文字母排序 #語法:list.sort(reverse=True|False, key=myFunc) #key:可選。指定排序標準的函數。 a1 = ["tom","John","bo","mikewang","jolin","Michael"] print(a1) print() a1.sort() print("1-1.依照字母排序(先大寫,後小寫)=\n", a1) #--------------------- #(2)依照文字長度排序:key = myLen,............def myLen(item): #注意:key=函數名稱,不需要加上() print() def myLen(item): return len(item) a1.sort(key = myLen) print("1-2.依照文字長度排序=\n", a1) #--------------------- #(3)依照文字母排序(不管大小寫):key = str.lower print() a1.sort(key = str.lower) #注意:key=str.lower,全部轉小寫,不需要加上() print("1-3.依照文字母排序(不管大小寫)=\n", a1) #------------------------------ #2.練習2:讀取excel檔案的進階排序(結合自訂def函數) #--------------------- #(1)依照文字母排序,先大寫,後小寫(score4.xlsx,裡面的name有大寫,小寫) import pandas as pd df = pd.read_excel("https://acupun.site/lecture/python/py_example/chp16/score4.xlsx","mad3a") print() print("2-1.依照name字母排序(先大寫,後小寫)=\n", df.sort_values(by='name')) print() #--------------------- #(2)依照文字母排序(不管大小寫):df.sort_values(by="name", key=myLetter) def myLetter(item): #print("inside=", item) return item.str.lower() print() print("2-2.依照文字母排序(不管大小寫=\n", df.sort_values(by="name", key=myLetter)) #--------------------- #(3)依照文字長度排序= df.sort_values(by='name', key=myLen2) def myLen2(item): return item.str.len() print() print("2-3.依照文字長度排序=\n", df.sort_values(by='name', key=myLen2)) #------------------------------ #3.練習3:讀取excel檔案的進階排序(結合自訂lambda函數) #--------------------- #重點1:什麼是lambda函數:lambda就是一個有return的function的簡單寫法 #重點2:若函數只有一行,2個參數a,b,傳回a+b,可轉換成lambda函數寫法:lambda a,b:a+b #----------------------------------------------------- #(1)依照文字母排序,先大寫,後小寫(score4.xlsx,裡面的name有大寫,小寫) import pandas as pd df = pd.read_excel("https://acupun.site/lecture/python/py_example/chp16/score4.xlsx","mad3a") print() print("3-1.依照name字母排序(先大寫,後小寫)=\n", df.sort_values(by='name')) print() #--------------------- #(2)依照文字母排序(不管大小寫):df.sort_values(by="name", key=lambda a:a.str.lower()) print() print("3-2.依照文字母排序(不管大小寫=\n", df.sort_values(by="name", key=lambda a:a.str.lower())) #--------------------- #(3)依照文字長度排序= def myLen2(item): return item.str.len() print() print("3-3.依照文字長度排序=\n", df.sort_values(by='name', key=lambda a:a.str.len())) #--------------------------------------------------------------------