#----------------------------------------------------- #範例16-19:將1維series合併到2維DataFrame #https://www.w3schools.com/python/pandas/ref_df_merge.asp #https://ithelp.ithome.com.tw/articles/10200433 #http://violin-tao.blogspot.com/2017/06/pandas-2-concat-merge.html #http://changtw-blog.logdown.com/posts/895468-python-numpy-axis-concept-organize-notes #(1)檔案:學生成績檔:score2.xlsx(mad3a資料表) #https://acupun.site/lecture/python/py_example/chp16/score2.xlsx #(2)重點1:計算平均分數的series後,如何給予index名稱 # series1 = df2.mean(axis=1).rename('個人平均') #(3)重點2:如何左右合併(df + series1):concat # numpy和pandas中 axis(軸)的概念: # (A)df.mean(axis=1),表示依照row(index),計算每一水平列(每個學生)的平均 # 圖示:http://user-image.logdown.io/user/18813/blog/18326/post/895468/NdQzZsNgR9un4TIruSVe_6.jpg # (B)df.mean(axis=0),表示依照欄位(colunmns),計算每一垂直欄位(每個科目)的平均 # 圖示:http://user-image.logdown.io/user/18813/blog/18326/post/895468/hdxcm2OEQGCxXpEgBn0V_9.jpg #(4)重點3: # 大部分的pandas函數,都支持1維度的series,與2維的DataFrame的計算 # 少數的pandas函數,例如:關鍵字查詢(.str.contains())只支援1維度的series,不支持2維的DataFrame的計算 # 2維的DataFrame的函數計算,可以指定axis=0 計算垂直欄位函數,或是指定axis=1,計算水平列的函數 #------------------------------ #1.練習1:計算數學科平均分數 #import pandas as pd #df = pd.read_excel("https://acupun.site/lecture/python/py_example/chp16/score2.xlsx","mad3a") #------------------------------ #(1)讀取網路檔案:score2.xlsx(mad3a資料表) print() print("1-1.全部的資料=\n") #------------------------------ #2.練習2:水平左右合併series,與DataFrame:pd.concat([df,series1], axis=1) #------------------------------ #df2 = df[["chi", "eng", "math"]] #(1)建立個人平均分數series #series1 = df2.mean(axis=1).rename('個人平均') #--------------- print() print("2-1.個人平均分數=\n", ) #------------------------------ #(2)使用concat左右合併(df + series1) #df3 = pd.concat([df,series1], axis=1) #------------------------------ print() print("2-2.合併後dataFrame=\n") #------------------------------ #3.練習3:垂直上下合併series,與DataFrame:pd.concat([df,series1], axis=1) #------------------------------ #df4 = df3[["chi", "eng", "math", "個人平均"]] #(1)建立科目平均分數series #series4 = df4.mean(axis=0).rename('科目平均') #------------------------------ print() print("3-1.科目平均分數=\n") #------------------------------ #(2)使用concat上下合併(df + series1) #df5 = pd.concat([df4, series4], axis=0) #------------------------------ print() print("3-2.上下合併後dataFrame=\n") #------------------------------ #(3)使用append上下合併(df + series1),小數點2位 #df5 = df4.append(series4).round(2) #------------------------------ print() print("3-3.上下合併後dataFrame=\n") #------------------------------ #(4)再補上前面2個欄位(id,name),小數點1位 #df6 = pd.concat([df[['id','name']], df5], axis=1).round(1) #------------------------------ print() print("3-4.再補上前面2個欄位(id,name)=\n") #-------------------------------------------------------------------- #-------------------------------------------------------------------- #範例16-19:將1維series合併到2維DataFrame #https://www.w3schools.com/python/pandas/ref_df_merge.asp #https://ithelp.ithome.com.tw/articles/10200433 #http://violin-tao.blogspot.com/2017/06/pandas-2-concat-merge.html #http://changtw-blog.logdown.com/posts/895468-python-numpy-axis-concept-organize-notes #(1)檔案:學生成績檔:score2.xlsx(mad3a資料表) #https://acupun.site/lecture/python/py_example/chp16/score2.xlsx #(2)重點1:計算平均分數的series後,如何給予index名稱 # series1 = df2.mean(axis=1).rename('個人平均') #(3)重點2:如何左右合併(df + series1):concat # numpy和pandas中 axis(軸)的概念: # (A)df.mean(axis=1),表示依照row(index),計算每一水平列(每個學生)的平均 # 圖示:http://user-image.logdown.io/user/18813/blog/18326/post/895468/NdQzZsNgR9un4TIruSVe_6.jpg # (B)df.mean(axis=0),表示依照欄位(colunmns),計算每一垂直欄位(每個科目)的平均 # 圖示:http://user-image.logdown.io/user/18813/blog/18326/post/895468/hdxcm2OEQGCxXpEgBn0V_9.jpg #(4)重點3: # 大部分的pandas函數,都支持1維度的series,與2維的DataFrame的計算 # 少數的pandas函數,例如:關鍵字查詢(.str.contains())只支援1維度的series,不支持2維的DataFrame的計算 # 2維的DataFrame的函數計算,可以指定axis=0 計算垂直欄位函數,或是指定axis=1,計算水平列的函數 #------------------------------ #1.練習1:計算數學科平均分數 #------------------------------ #(1)讀取網路檔案:score2.xlsx(mad3a資料表) import pandas as pd df = pd.read_excel("https://acupun.site/lecture/python/py_example/chp16/score2.xlsx","mad3a") print() print("1-1.全部的資料=\n", df) #------------------------------ #2.練習2:水平左右合併series,與DataFrame:pd.concat([df,series1], axis=1) #------------------------------ print() df2 = df[["chi", "eng", "math"]] #--------------- #(1)建立個人平均分數series series1 = df2.mean(axis=1).rename('個人平均') print("2-1.個人平均分數=\n", series1) #--------------- #(2)使用concat左右合併(df + series1) print() df3 = pd.concat([df,series1], axis=1) print("2-2.合併後dataFrame=\n", df3) #------------------------------ #3.練習3:垂直上下合併series,與DataFrame:pd.concat([df,series1], axis=1) #------------------------------ print() df4 = df3[["chi", "eng", "math", "個人平均"]] #--------------- #(1)建立科目平均分數series series4 = df4.mean(axis=0).rename('科目平均') print("3-1.科目平均分數=\n", series4) #--------------- #(2)使用concat上下合併(df + series1) print() df5 = pd.concat([df4, series4], axis=0) print("3-2.上下合併後dataFrame=\n", df5) #--------------- #(3)使用append上下合併(df + series1),小數點2位 print() df5 = df4.append(series4).round(2) print("3-3.上下合併後dataFrame=\n", df5) #--------------- #(4)再補上前面2個欄位(id,name),小數點1位 print() df6 = pd.concat([df[['id','name']], df5], axis=1).round(1) print("3-4.再補上前面2個欄位(id,name)=\n", df6) #--------------------------------------------------------------------