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

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

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 = 0for line in file: #獲取每一行的數(shù)據(jù)num += 1if num == 1: #丟棄第一行標(biāo)題continuetemp = 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é)果如下:

#逐行計(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)

df.sort_values("總分", ascending=False, inplace=True) #根據(jù)人數(shù)降序排序print(df)
輸出結(jié)果如下:

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ù)量

五、對(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)秀文章:
課堂4:循環(huán)結(jié)構(gòu)經(jīng)典案例
評(píng)論
圖片
表情
