#----------------------------------------------------- #範例16-16:關鍵字查詢: #https://www.gairuo.com/p/pandas-query #https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.query.html #https://www.w3schools.com/python/pandas/ref_df_query.asp #https://www.geeksforgeeks.org/python-filtering-data-with-pandas-query-method/ #https://zhuanlan.zhihu.com/p/29720881 #(1)檔案:學生成績檔(score6.xlsx),有不同班級 #https://acupun.site/lecture/python/py_example/chp16/score6.xlsx #(2)重點1:關鍵字查詢 # 在SQL語法,用的是like。 # 在pandas裡面,用的是.str.contains() # 範例:df[ df['myclass'].str.contains('經管') ] # 範例:df[ df.myclass.str.contains('經管') ] #注意:.str的作用是將’Series‘轉換為類似Strings的結構,就可以用contains函數,做關鍵字查詢。 #(3)重點2:關鍵字查詢 # 關鍵字查詢,myclass有經管的關鍵字: # 範例:df[ df['myclass'].str.contains('經管') ] # 範例:df[ df.myclass.str.contains('經管') ] # 對應sql指令:select * from python where myclass like '%經管%' #(4)重點3:關鍵字查詢 # df[ df.loc[:]["myclass"].str.contains("經管") ] #(5)重點4:全部欄位關鍵字查詢 # df[ df.apply(lambda x: x.astype(str).str.contains('99')).any(axis=1) ] #------------------------------ #1.練習1:查詢myclass欄位 = "經管3a" #------------------------------ #(1)讀取網路檔案:score6.xlsx(python資料表),有不同班級 #import pandas as pd #df = pd.read_excel("https://acupun.site/lecture/python/py_example/chp16/score5.xlsx","python") print() print("1-1.全部的資料=\n") #--------------------- #(2)關鍵字查詢,myclass有經管的關鍵字:df[ df['myclass'].str.contains('經管') ] #對應sql指令:select * from python where myclass like '%經管%' print() print("1-2-1.關鍵字查詢,有經管的關鍵字=\n") print() print("1-2-2.關鍵字查詢,有資工的關鍵字=\n") #重點:str的作用是將’Series‘轉換為類似Strings的結構,就可以用contains函數,做關鍵字查詢。 #------------------------------ #(3)關鍵字查詢,myclass欄位有2的關鍵字:df2 = df[ df.name.str.contains("h") ] #對應sql指令:select * from python where myclass like '%h%' print() print("1-3.關鍵字查詢,myclass欄位有2的關鍵字=\n") #--------------------- #(4)關鍵字查詢,myclass有2a的關鍵字:df[ df.loc[:]["myclass"].str.contains("2a") ] #對應sql指令:select * from python where myclass like '%2a%' print() # 3種寫法 # https://zhuanlan.zhihu.com/p/29720881 #select1 = df.loc[:]["myclass"].str.contains("2a") #select1 = df.loc[:, "myclass"].str.contains("2a") print("1-4-1.關鍵字查詢,myclass有2a=\n") print() #df2 = df.loc[df['myclass'].str.contains("2a")] print("1-4-2.關鍵字查詢,myclass有2a=\n") #------------------------------ #2.練習2:查詢全部欄位有 "99"的資料(使用Series結構) #------------------------------ #(1)關鍵字查詢,全部欄位有99的關鍵字:df[ df.apply(lambda x: x.astype(str).str.contains('99')).any(axis=1) ] print() # 觀念:DataFrame的2維結構,沒有支援str.contains('')的函數 # 觀念:Series的1維結構,才有支援str.contains('')的函數 # 觀念:所以,df(DataFrame),無法使用關鍵字查詢函數str.contains('') # 改善方法:使用df.apply(f),使用函數,轉成Series,再去關鍵字查詢 # 方法:查詢全部欄位的原理:先把全部欄位轉成文字,然後再做關鍵字查詢 # (A)先把全部欄位轉成文字: # (B)再做關鍵字查詢: print() print("2-1.關鍵字查詢,全部欄位有99的關鍵字=\n") #-------------------- #(5)把df,儲存為score1c.xlsx print() #(A).儲存到虛擬專案區(暫存幾天) #df.to_excel("score5.xlsx") #(A).加入google雲端的目錄(永久保存) #A.先在左邊的『檔案』, #B.點按『掛接雲端硬碟』,顯示『drive』 #import os #os.chdir("/content/drive/MyDrive/Colab Notebooks") #df.to_excel("score1c.xlsx") #查看目錄的檔案名稱 !ls #-------------------------------------------------------------------- #-------------------------------------------------------------------- #範例16-16:關鍵字查詢: #https://www.gairuo.com/p/pandas-query #https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.query.html #https://www.w3schools.com/python/pandas/ref_df_query.asp #https://www.geeksforgeeks.org/python-filtering-data-with-pandas-query-method/ #https://zhuanlan.zhihu.com/p/29720881 #(1)檔案:學生成績檔(score6.xlsx),有不同班級 #https://acupun.site/lecture/python/py_example/chp16/score6.xlsx #(2)重點1:關鍵字查詢 # 在SQL語法,用的是like。 # 在pandas裡面,用的是.str.contains() # 範例:df[ df['myclass'].str.contains('經管') ] # 範例:df[ df.myclass.str.contains('經管') ] #注意:.str的作用是將’Series‘轉換為類似Strings的結構,就可以用contains函數,做關鍵字查詢。 #(3)重點2:關鍵字查詢 # 關鍵字查詢,myclass有經管的關鍵字: # 範例:df[ df['myclass'].str.contains('經管') ] # 範例:df[ df.myclass.str.contains('經管') ] # 對應sql指令:select * from python where myclass like '%經管%' #(4)重點3:關鍵字查詢 # df[ df.loc[:]["myclass"].str.contains("經管") ] #(5)重點4:全部欄位關鍵字查詢 # df[ df.apply(lambda x: x.astype(str).str.contains('99')).any(axis=1) ] #------------------------------ #1.練習1:查詢myclass欄位 = "經管3a" #------------------------------ #(1)讀取網路檔案:score6.xlsx(python資料表),有不同班級 import pandas as pd df = pd.read_excel("https://acupun.site/lecture/python/py_example/chp16/score5.xlsx","python") print() print("1-1.全部的資料=\n", df) #--------------------- #(2)關鍵字查詢,myclass有經管的關鍵字:df[ df['myclass'].str.contains('經管') ] #對應sql指令:select * from python where myclass like '%經管%' print() select1 = df['myclass'].str.contains("經管") print("1-2-1.關鍵字查詢,有經管的關鍵字=\n", df[select1] ) print() print("1-2-2.關鍵字查詢,有資工的關鍵字=\n", df[ df['myclass'].str.contains('資工') ] ) #重點:str的作用是將’Series‘轉換為類似Strings的結構,就可以用contains函數,做關鍵字查詢。 #------------------------------ #(3)關鍵字查詢,myclass欄位有2的關鍵字:df2 = df[ df.name.str.contains("h") ] #對應sql指令:select * from python where myclass like '%h%' print() select1 = df.myclass.str.contains("2") print("1-3.關鍵字查詢,myclass欄位有2的關鍵字=\n", df[select1] ) #--------------------- #(4)關鍵字查詢,myclass有2a的關鍵字:df[ df.loc[:]["myclass"].str.contains("2a") ] #對應sql指令:select * from python where myclass like '%2a%' print() # 3種寫法 # https://zhuanlan.zhihu.com/p/29720881 select1 = df.loc[:]["myclass"].str.contains("2a") #select1 = df.loc[:, "myclass"].str.contains("2a") print("1-4-1.關鍵字查詢,myclass有2a=\n", df[select1] ) print() df2 = df.loc[df['myclass'].str.contains("2a")] print("1-4-2.關鍵字查詢,myclass有2a=\n", df2 ) #------------------------------ #2.練習2:查詢全部欄位有 "99"的資料(使用Series結構) #------------------------------ #(1)關鍵字查詢,全部欄位有99的關鍵字:df[ df.apply(lambda x: x.astype(str).str.contains('99')).any(axis=1) ] print() # 觀念:DataFrame的2維結構,沒有支援str.contains('')的函數 # 觀念:Series的1維結構,才有支援str.contains('')的函數 # 觀念:所以,df(DataFrame),無法使用關鍵字查詢函數str.contains('') # 改善方法:使用df.apply(f),使用函數,轉成Series,再去關鍵字查詢 # 方法:查詢全部欄位的原理:先把全部欄位轉成文字,然後再做關鍵字查詢 # (A)先把全部欄位轉成文字: # (B)再做關鍵字查詢: print() select1 = df.apply(lambda x: x.astype(str).str.contains('99')).any(axis=1) print("2-1.關鍵字查詢,全部欄位有99的關鍵字=\n", df[select1] ) #-------------------- #(5)把df,儲存為score1c.xlsx print() #(A).儲存到虛擬專案區(暫存幾天) #df.to_excel("score5.xlsx") #(A).加入google雲端的目錄(永久保存) #A.先在左邊的『檔案』, #B.點按『掛接雲端硬碟』,顯示『drive』 #import os #os.chdir("/content/drive/MyDrive/Colab Notebooks") #df.to_excel("score1c.xlsx") #查看目錄的檔案名稱 !ls #--------------------------------------------------------------------