<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          利用pandas模塊處理學(xué)生成績(jī)

          共 2817字,需瀏覽 6分鐘

           ·

          2021-11-23 16:23

          說在前面

          Python語(yǔ)言之所以受到廣大用戶的歡迎,其豐富的生態(tài)環(huán)境是重要因素之一。高質(zhì)量的第三方庫(kù)數(shù)不勝數(shù),利用這些第三方庫(kù),我們可以輕松地實(shí)現(xiàn)各種復(fù)雜功能,解決實(shí)際問題。如何學(xué)習(xí)使用第三方庫(kù)?是熟讀文檔,待熟悉各種函數(shù)功能后再干活?還是從問題出發(fā),根據(jù)實(shí)際需要去查詢文檔,模仿和借鑒示范案例代碼,遷移到自己的實(shí)際項(xiàng)目中?此二者見仁見智,沒有唯一的答案。
          “數(shù)據(jù)處理與應(yīng)用”是高中信息技術(shù)浙教版必修一第四章的內(nèi)容,“利用pandas模塊處理數(shù)據(jù)”是重要知識(shí)點(diǎn)之一,其內(nèi)容多、難度大,課不好上,稍不注意就會(huì)落入列舉語(yǔ)法知識(shí)點(diǎn)的窠臼。在有限的課時(shí)條件下,不可能深入地研究相關(guān)模塊的全部知識(shí)點(diǎn);選擇合適的案例,讓學(xué)生在解決實(shí)際問題的過程中體驗(yàn)編程方法,學(xué)會(huì)查閱幫助文檔,掌握利用pandas模塊處理數(shù)據(jù)的基本思路,是教學(xué)的重點(diǎn)。
          為了提高課堂教學(xué)效率,確保能夠順利完成教材要求的“百家姓數(shù)據(jù)處理”項(xiàng)目,我事先為學(xué)生準(zhǔn)備了一份學(xué)案,先解決一個(gè)簡(jiǎn)單的“學(xué)生成績(jī)處理”項(xiàng)目,希望學(xué)生通過閱讀和運(yùn)行示例代碼,能夠理解各功能函數(shù)的作用,實(shí)現(xiàn)知識(shí)的遷移。
          因?yàn)槭谡n的班級(jí)是學(xué)考班,對(duì)學(xué)生要求比較低,所以此案例功能較為簡(jiǎn)單。剛剛接觸新課程、新教材,適宜的教學(xué)案例非常匱乏,需要廣大教師的共同努力來充實(shí)案例題庫(kù),希望我今天的分享能起到拋磚引玉的作用,歡迎大家批評(píng)指正,與我交流。

          經(jīng)典案例

          利用pandas模塊處理學(xué)生成績(jī)

          已有素材:存儲(chǔ)了學(xué)生成績(jī)信息的csv文件“stu_info.csv”。


          一、創(chuàng)建pandas DataFrame對(duì)象
          創(chuàng)建pandas?DataFrame對(duì)象的方法很多,最簡(jiǎn)單的方法是直接使用read_csv()read_excel()等函數(shù)從數(shù)據(jù)源讀取數(shù)據(jù)創(chuàng)建DataFrame對(duì)象,代碼如下:
          df = pd.read_csv("stu_info.csv")
          也可以先讀取文件數(shù)據(jù),并存儲(chǔ)到各列表,再創(chuàng)建字典并構(gòu)造DataFrame對(duì)象。需要注意的是從文件中讀取的數(shù)據(jù)均為字符串類型,需要將各科成績(jī)轉(zhuǎn)換成數(shù)值類型。代碼如下:
          class_name = [] #存儲(chǔ)班級(jí)名稱stu_name = []   #存儲(chǔ)學(xué)生姓名cn_score = []   #語(yǔ)文成績(jī)math_score = [] #數(shù)學(xué)成績(jī)en_score = []   #英語(yǔ)成績(jī)with open("stu_info.csv", "r", encoding='utf-8') as file:    num = 0                  for line in file:  #獲取每一行的數(shù)據(jù)        num += 1        if num == 1: #丟棄第一行標(biāo)題            continue        temp = line.strip().split(",")        class_name.append(temp[0])        stu_name.append(temp[1])        cn_score.append(float(temp[2]))        math_score.append(float(temp[3]))        en_score.append(float(temp[4]))#使用字典構(gòu)造包含了班級(jí)、姓名和各科成績(jī)列的DataFrame對(duì)象(不含標(biāo)題)data = {"班級(jí)":class_name, "姓名":stu_name, "語(yǔ)文":cn_score, "數(shù)學(xué)":math_score, "英語(yǔ)":en_score}df = pd.DataFrame(data) #構(gòu)造DataFrame對(duì)象print(df)

          輸出結(jié)果如下:


          二、pandas DataFrame對(duì)象增加列
          與為字典增加新的鍵值對(duì)類似,可以為pandas DataFrame對(duì)象增加新的列。代碼如下:
          #逐行計(jì)算各學(xué)生總分,并增加“總分”列df["總分"] = 0.0 #試試將值改為0看看for r in df.index:    df.at[r,"總分"] = sum(df.loc[r,["語(yǔ)文", "數(shù)學(xué)", "英語(yǔ)"]])#rank()函數(shù)的應(yīng)用:根據(jù)總分排名,并增加“排名”列df['排名'] = df['總分'].rank(ascending=False)print(df)
          輸出結(jié)果如下:


          三、對(duì)pandas DataFrame對(duì)象排序
          sort_values()函數(shù)的應(yīng)用:按照總分降序排列。代碼如下:
          df.sort_values("總分", ascending=False, inplace=True) #根據(jù)人數(shù)降序排序print(df)

          輸出結(jié)果如下:


          四、輸出滿足條件的數(shù)據(jù)
          可以通過設(shè)置篩選條件,輸出滿足條件的學(xué)生信息。代碼如下:
          print(df[df["姓名"]=="周奕辰"]) print(df[(df["語(yǔ)文"]>105) | (df["數(shù)學(xué)"]>135)])print(df[(df["語(yǔ)文"]>100) & (df["英語(yǔ)"]>100)])print(df[(df["語(yǔ)文"]>100) & (df["英語(yǔ)"]>100)].count()) #輸出滿足條件的學(xué)生數(shù)量
          輸出結(jié)果如下:

          五、對(duì)pandas DataFrame對(duì)象做分組和聚合操作

          groupby()函數(shù)的應(yīng)用:將數(shù)據(jù)按“班級(jí)”分組,計(jì)算每個(gè)班級(jí)各有多少人,或計(jì)算各班平均分代碼如下:

          class_df = df.groupby("班級(jí)").count() # 按關(guān)鍵詞分組計(jì)數(shù)class_df.sort_values('姓名', ascending=False, inplace=True) #根據(jù)人數(shù)降序排序print(class_df)print("#" * 50)#將數(shù)據(jù)按“班級(jí)”分組,計(jì)算各班平均分ave_df = df.groupby("班級(jí)").mean()print(ave_df)

          輸出結(jié)果如下:


          需要本文PPT、源代碼和課后練習(xí)答案的,可以加入“Python算法之旅”知識(shí)星球參與討論和下載文件,Python算法之旅”知識(shí)星球匯集了數(shù)量眾多的同好,更多有趣的話題在這里討論,更多有用的資料在這里分享。

          我們專注Python算法,感興趣就一起來!



          相關(guān)優(yōu)秀文章:

          閱讀代碼和寫更好的代碼

          最有效的學(xué)習(xí)方式

          課堂1:海龜繪圖之正四邊形及其拓展

          課堂2:海龜繪圖之多彩螺旋線

          課堂3:海龜繪圖之繪制虛線

          課堂4:循環(huán)結(jié)構(gòu)經(jīng)典案例

          課堂5:解析算法經(jīng)典案例

          課堂6:枚舉算法經(jīng)典案例


          瀏覽 157
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美午夜精品成人片在线播放 | 日批视频在线 | 国产v夜色观看 | wwwwww片 | 国产成人av |