資源簡介 專題9 pandas數據統計學習目標 1.對DataFrame對象按列進行公式計算,描述DataFrame對象數據以字典中鍵為列的存儲形式;2.對每個鍵對應一列數據多個值進行切片,掌握取出不同數據區域內容的方法;3.運用函數統計對象的平均值等操作,運用排序函數對數據進行有序排列;4.運用groupby函數對數據進行分組的方法,并在分組的基礎上進行數據統計.Pandas有Series和DataFrame兩種對象,這兩種對象均有index和values屬性,Series對象的values是一維的,DataFrame的values是二維的,因此DataFrame對象比Series對象多一個columns屬性,可以理解為index表示行號,columns表示列名。pandas處理的對象主要是DataFrame,取出DataFrame中的一列,降維為Series對象,可以用list函數轉換為列表,對某列的值進行切片,可以轉換為一個數值。可以對記錄選取、篩選和分組操作,靈活地區分不同類型的數據,可以對記錄進行排序操作,實現數據的有序顯示。可以對各條記錄的字段進行遍歷,統計符合要求字段值的數量、總和、平均值以及最值。(2024年1月浙江省選考)某學院舉行運動會,比賽設跳高、100米等項目,每個項目分男子組和女子組。現要進行報名數據處理和比賽成績分析。請回答下列問題: (1)運動會報名規則為:對于每個項目的男子組和女子組,每個專業最多各報5人(如“軟件工程”專業在男子跳高項目中最多報5人)。軟件工程專業的報名數據保存在DataFrame對象df中,如圖a所示。若要編寫Python程序檢查該專業男子跳高項目報名是否符合規則,下列方法中,正確的是________(單選,填字母)。A.從df中篩選出性別為“男”的數據dfs,再從dfs中篩選出項目為“跳高”的數據,判斷篩選出的數據行是否超過5行B.對df中數據按性別排序并保存到dfs中,再從dfs中篩選出項目為“跳高”的數據,判斷篩選出的數據行是否超過5行C.從df中篩選出項目為“跳高”的數據dfs,判斷dfs中是否有連續5行以上的男生數據(2)運動員比賽成績的部分數據如圖b所示。根據已有名次計算得,第1名至8名分別計9,7,6,5,4,3,2,1分,第8名之后計0分。實現上述功能的部分Python程序如下,請在程序中劃線處填入合適的代碼。import pandas as pdimport matplotlib.pyplot as plt#讀取如圖b所示數據,保存到 DataFrame 對象 df1 中,代碼略f = [9, 7, 6, 5, 4, 3, 2, 1]for i in range(0,len(df1)): rank = df1.at[i,″名次″] #通過行、列標簽取單個值 score = 0 if rank <= 8: ______________df1.at[i,″得分″] = score(3)根據上述 df1 中的得分數據,統計各專業總分,繪制如圖 c 所示的柱形圖,實現該功能的部分Python程序如下:df2 = dfl.groupby(″________″,as_index=False).sum() #分組求和#設置繪圖參數,代碼略plt.bar(x,y)①請在程序中劃線處填入合適的代碼。②程序的方框中應填入的正確代碼為________(單選,填字母)A.x=df1[″專業″]y=df1[″總分″]B.x=df2[″專業″]y=df2[″得分″]C.df1[″專業″]=″專業″df1[″總分″]=″總分″D.df2[″專業″]=″專業″df2[″得分″]=″得分″重難點1 利用Pandas批量處理文件Pandas主要功能是計算一個集合對象中某個字段的記錄數量、總和、平均值和最值(最大值或最小值)。這個集合可以是通過篩選找到符合處理條件的數據(子集),也可以是通過分組,將某列相同字段值的記錄組合在一起,形成一個個的分組,再分別統計各個分組的數量、和、平均值和最值。這些功能Excel軟件也可以實現,但若是數據分布在多個數據文件時,Excel軟件就要手工不斷地打開數據,重復進行統計,而Pandas可以通過算法,利用循環結構,將這些操作讓計算機自動完成。例題 小紅收集了部分城市2021年全年每天PM2.5、PM10、CO濃度數據,每天的數據分別保存在以8位日期字符串命名的CSV文件中,部分文件如圖a所示,每個文件記錄了一天24小時的監測數據,示例如圖b所示。為統計分析城市A全年各月份PM2.5的月平均濃度(當月的日平均濃度的平均值),編寫Python程序。請回答下列問題:(1)定義pmday函數,功能為:讀取某天的CSV文件,返回城市A當天PM2.5的日平均濃度。函數代碼如下,劃線處應填入的代碼為________(單選,填字母)。A.df['類型']=='PM2.5'B.df['類型'=='PM2.5']C.df[df['類型']]=='PM2.5'D.df[df['類型']=='PM2.5']import pandas as pddef pmday(dayfile): df = pd.read_csv(dayfile) #讀取文件dayfile中的數據 df =________ return df['城市A'].mean() #返回城市A當天PM2.5的日平均濃度(2)統計城市A各月份PM2.5的月平均濃度并繪制線形圖,部分Python程序如下,請在劃線處填寫合適的代碼。import matplotlib.pyplot as plt def tstr(t):if t<10: retrun '0'+str(t) else: retrun str(t)pm = [0] * 12mdays=[31,28,31,30,31,30,31,31,30,31,30,31] #2021年每月天數for m in range(12): sm = 0 mstr = tstr(m+1) for d in range(①________): dstr = tstr(d+1) dayfile = '2021' + mstr + dstr + '.csv' sd = pmday(dayfile) ②________ pm[m] = sm/mdays[m]x = [1,2,3,4,5,6,7,8,9,10,11,12]y=③________plt.plot(x,y) #繪制線性圖#設置繪圖參數,顯示如圖c所示線形圖,代碼略(3)城市A 2021年PM2.5年平均濃度為34.6微克/立方米。由圖c可知,城市A 2021年PM2.5月平均濃度超過年平均濃度的月份共________個。變式 學校食堂以服務質量進行了調查問卷,調查項目共 5 項(具體內容略)。12個班級的調查結果分別存儲在“dy01.csv”“dy02.csv”等文件中(如圖a所示),每個文件部分界面如圖b所示。現需要分析每個問題選“A”的情況,采用Python編制程序代碼,請回答下列問題。(1)定義fun_A函數實現統計某個班級5個問題的選“A”的人數,請在劃線處填入合適代碼。import pandas as pddef fun_A(file): df=pd.read_csv(file) A_list=[] for col in df.columns[1:]: ________________ A_list.append(c) return A_list(2)統計12個班級每個問題選“A”的總人數,請在劃線處填入合適代碼。ans_list=[]s=″010203040506070809101112″for i in range(0,len(s)-1,2): filename=″dy″+ ①__________+″.csv″ res= fun_A(filename) ans_list.append(res)x=[″問題1″,″問題2″,″問題3″,″問題4″,″問題5″]y=[0,0,0,0,0]for i in range(5): s=0 for j in range(12):②__________ y[i]=s(3)根據上述統計的得分數據,統計每個問題選“A”的數量,繪制如圖 c 所示的柱形圖,請在劃線處填入合適代碼。圖cimport matplotlib.pyplot as pltplt.title(″每個問題選A的總人數″)plt.bar(①__________,②__________,label='A 選項')plt.legend()plt.show()重難點2 利用函數按列進行數據統計DataFrame是Pandas處理的主要對象,index屬性記錄了每行記錄所在的行索引,columns屬性記錄每列的名稱。df.列名就可以表示該列所有的數據的集合,可以運用函數計算一個集合對象的記錄數量、總和、平均值和最值(最大值或最小值)。通過篩選找到符合處理條件的數據(子集)集合,再對集合進行求和等計算。通過分組,將某列相同字段值的記錄組合在一起,形成一個個的分組,再分別統計各個分組的數量、和、平均值和最值。例題 小明通過調查問卷收集了食堂滿意度情況數據,保存在“data.csv”文件,如圖a所示。圖a圖b為統計分析每個調查項目不同選項的人數及不滿意率,編寫Python程序。請回答下列問題:(1)統計每一項調查內容的總票數、滿意、一般及不滿意人數,程序運行結果如圖b所示,import pandas as pdimport matplotlib.pyplot as plt #導入模塊df=pd.read_csv(″data.csv″,encoding=″utf-8″)#讀取csv文件中的數據cols=df.columns[1:]poll=len(df)data= {″調查項目″:[],″總票數″:[],″滿意″:[],″一般″:[],″不滿意″:[]}for colname in cols: dfc=df.groupby(①__________,as_index=False)[″序號″].count() data[″調查項目″].append(colname) data[″總票數″].append(poll) for j in dfc.index: name=dfc.at[j,colname] data[name].append(②__________)df2=pd.DataFrame(data) ; print(df2)(2)計算每個項目的“不滿意率”(=“不滿意”/“總票數”*100),并使用柱形圖分析每個項目的“不滿意率”情況,如圖c所示,請在劃線處填入合適的代碼。圖cdf2[″不滿意率(%)″]=①__________x=②__________y=df2[″不滿意率(%)″]plt.figure(figsize=(8,4))pl.title(″食堂調查問卷不滿意率(%)情況″)plt.bar(x,y,label=″不滿意率(%)″)plt.legend()變式 某學校開設選修課并在期末讓學生對其進行滿意度調查,選修課分藝術、體育、語言、計算機、職業技能等領域。現要進行報名數據處理和滿意度分析, 請回答下列問題:圖a圖b(1)選修課開設的條件為:報名人數大于20人。其中計算機類選修課的報名數據保存在DataFrame對象df中,如圖a所示。若要編寫Python程序檢查其中第1學期的“數字視音頻處理”選修課是否符合開設條件,下列方法中,不正確的是________(單選,填字母)。A.對df中數據按開設學期排序并保存到dfs中,再從dfs篩選出選修課名稱為“數字視音頻處理”的數據,判斷篩選出的數據行是否超過20行B.從df中篩選出選修課名稱為“數字視音頻處理”的數據dfs,再對dfs按開設學期進行升序排序,判斷數據前21行的開設學期是否是第1學期C.從df中篩選出選修課名稱為“數字視音頻處理”的數據dfs,再按開設學期分組統計個數,判斷第1學期的個數是否超過20(2)計算機類選修課學生的滿意度調查部分數據如圖b所示。滿意度分3個等級:A.滿意、B.一般、C.不滿意,分別計1分、0分、-1分,基礎分為100分。實現計算各選修課的滿意度功能的部分Python程序如下,請在劃線處填入合適的代碼。import pandas as pdimport matplotlib.pyplot as plt#讀取如圖b所示數據,保存到DataFrame對象df1中,代碼略score=[1,0,-1]for i in range(0,len(df1)): rank=df1.at[i,″滿意度″] ①________ df1.at[i,″得分″]=marka=df1.groupby(″選修課名稱″,as_index=False)[″得分″].②________for i in range(0,len(a)): a.at[i,″得分″]+=100(3)根據滿意度進行降序排序,繪制如圖c所示的柱形圖,實現該功能的部分Python程序如下:圖ca=a.sort_values(″①__________″,ascending=False)#設置繪圖參數,代碼略x=②________y=a[″得分″]plt.bar(x,y) #繪制柱形圖重難點1 利用Pandas批量處理文件1.高一年級(9個班級)進行“七選三”預選科。每個班一個Excel文件(如圖a所示)存儲預選科數據。數據表中“1”代表學生選擇該科目,空白代表學生未選擇該科目(某班部分選科數據如圖b所示)。請回答下列問題。圖a圖b(1)定義如下函數check(dfs)檢查選考科目數是否有誤,其中參數dfs為DataFrame對象,由如圖b所示Excel數據導入。返回值erlst為列表,列表元素數據類型為整型,表示錯誤數據行對應的學生序號(例如第6行學生“戴*躍”的序號為5)。def check(dfs): erlst = [] for i in range(len(dfs)):xk_sum = 0 for j in dfs.columns[2:]: dyg = ①________ if dyg == 1: xk_sum += dyg if xk_sum != 3: erlst.append(②________)return erlst①在程序中劃線處填入的正確代碼為________(單選,填字母)。A.dfs.at['i','j'] B.dfs.at['j','i']C.dfs.at[i,j] D.dfs.at[j,i]②在程序中劃線處填入合適的代碼。(2)讀取每個班級的Excel選科數據,若檢查無誤,則統計每個班級同時選報“物理”和“化學”學科的人數,存儲在字典ans中。實現該功能的Python程序如下:import pandas as pdans = {}for i in range(1,10): filename = str(i)+'. xlsx' df =pd.read_excel(filename) errlist = check(df) if errlist != []: print(″請檢查文件″, filename,″中序號為″, errlist,″的學生″) else: ①__________ #篩選同時選擇物理和化學的數據記錄存儲在 df1中 ans[str(i)+'班'] = [②________] #形如{“1班”:[41]}①在程序劃線處應填入的正確代碼段為________(多選,填字母)。(注:全部選對的得 2 分,選對但不全的得1分,不選或有選錯的得 0 分)A.df1 = df[df['物理']==1]df1 = df1[df1['化學']==1]B.df1 = df[df['物理']==1]df1 = df[df['化學']==1]C.df1 = df[df['化學']==1]df1 = dfl[df1['物理']==1]D.df1 = df[df['化學']==1]df1 = df[df['物理']==1]②在程序劃線處填入合適的代碼。(3)用字典ans創建并轉置的DataFrame對象如圖c所示,繪制柱形圖如圖d所示。實現該功能的Python程序如下:import matplotlib.pyplot as pltadf = pd.DataFrame(ans,index= ['人數']).Tplt.bar(______)#設置繪圖參數,代碼略plt.show()程序的劃線處應填入的正確代碼為________(單選,填字母)。A.adf.人數,adf.班級B.adf.班級,adf.人數C.adf.人數,adf.indexD.adf.index,adf.人數2.學校暑期開展“青春迎亞運”活動,邀請高二學生每日參加運動鍛煉并進行線上打卡。每周收集一次相關數據,分別保存在相應的xlsx文件中,部分文件如圖a所示;每個文件記錄了一周7天的打卡數據,示例如圖b所示,其中運動時長單位:分鐘。圖a圖b為統計分析學生鍛煉情況,給出周報數據,編寫Python程序,請回答以下問題:(1)定義px函數,功能為:讀取某一周的打卡數據,將其按班級進行排序操作并返回結果。函數代碼如下,將劃線處代碼補充完整。import pandas as pddef px(file_week): df=pd.read_excel(file_week) df=df.sort_values(________,ignore_index=True) #按班級升序排序,參數ignore_index=True 表示更新索引 return df(2)統計某一周各運動項目的參與人次,并繪制柱形圖,部分Python代碼如下:import matplotlib. pyplot as plts=input(″請輸入文件名:″)df=px(s)df1=df.groupby(″運動項目″,as_index=False).①________ #統計各運動項目參與人次df1.rename(columns={″學號″:″參與人次″},inplace=True) #更改列標題plt.bar(②________)plt.xlabel(″運動項目″)plt.ylabel(″參與人次″)plt.show()劃線處應填入的代碼為________(單選,填字母)。A.①count() ②df1[″參與人次″],df1[″運動項目″]B.①sum() ②df1[″參與人次″],df1[″運動項目″]C.①sum() ②df1.運動項目,df1.參與人次D.①count() ②df1.運動項目,df1.參與人次(3)統計某一周每班各學生的總運動時長后,比較得出該周每班最高的前兩位時長,部分Python程序代碼如下,請在劃線處填入合適的代碼。qp=[[0 for i in range(m)]for j in range(n)]'''定義數組qp記錄每班各學生一周運動總時長,n為班級數,m為每班人數。其中qp[0][0]~qp[0][m-1]存儲1班1號~m號同學的每周運動總時長,以此類推,qp[n-1][0]~qp[n-1][m-1]存儲n班1號~m號同學的每周運動總時長。'''print(″本周每班最高的前兩位時長分別為:″)i=0while i num=df[″學號″][i] cla=df[″班級″][i] ①________ if i!=0 and df[″班級″][i]!=df[″班級″][i-1] or②________: cla=df[″班級″][i-1] k1=0;k2=0 for j in range(1,len(qp[cla-1])): if qp[cla-1][j]>qp[cla-1][k1]: ③________ k1=j elif qp[cla-1][j]>qp[cla-1][k2]: k2=j print(cla,″班″,qp[cla -1][k1],qp[cla -1][k2]) i=i+1(4)統計某一周各運動項目的參與人次后繪制柱形圖如圖c所示,由圖可知,該周參與人氣最高的運動項目為______________。圖c3.為統計分析不同年級學生名字中的常用字,小王同學收集了本校所有學生的名字,并以入學年份為文件名分別保存在Excel文件中,文件如圖a所示,每個文件包含了學生的年級、姓名和性別信息,如圖b所示。編寫Python程序。請回答下列問題:(1)定義getname函數,功能為:讀取某年級的Excel文件,找出文件中同性別的學生,將學生姓名中的每個字(不包含姓氏,沒有復姓學生)提取出來存儲在列表mz中并返回列表。函數代碼如下,請在劃線處填寫合適的代碼。def getname(nj, xb): mz=[] df=pd.read_excel(nj+″學生名單.xlsx″) for i in df.index: xm=df.at[i,″姓名″] if ①________: for m in xm[1:]: mz.append(m) return ②________(2)小王想統計女生名字中出現最頻繁的10個字,部分Python程序如下,請在劃線處選擇合適的代碼。import pandas as pdxb=input(″請輸入性別:″) #輸入性別″女″nianji=[″2020級″,″2021級″,″2022級″]mzs=[] #存儲姓名中的字for nj in nianji: mzs=mzs+getname(nj,xb)data={'字':mzs,'個數':[1]*len(mzs)}df1=pd.DataFrame(data)df2=df1.groupby(″字″,as_index=False).count() #統計每個字出現的次數df3=__________劃線處應選擇的代碼是________(單選,填字母)。A.df2.sort_values(″個數″,ascending=True)[:10]B.df2.sort_values(″字″,ascending=False).tail(10)C.df2.sort_values(″字″,ascending=True).tail(10)D.df2.sort_values(″個數″,ascending=False).head(10)(3)將統計結果(10個最頻繁的字)繪制成柱形圖,部分Python程序如下,請在劃線處填寫合適的代碼。import matplotlib.pyplot as pltplt.title(xb +″生取名常用字″)plt.bar(df3.字,__________)plt.show()4.小明利用“在線社團報名系統”收集了全校學生的社團報名信息,并將報名數據導出到“社團報名.xlsx”中,如圖a所示。然后編寫Python程序對報名數據進行處理,生成分別以班級名和社團名為文件名的Excel文件,以便分發給相應的社團指導老師和班主任。圖a圖b(1)在對表格進行數據整理時發現,關于“Jacky.Y”同學的記錄可能存在的數據問題是________(選填:A.數據缺失 B.數據異常 C.邏輯錯誤 D.數據格式不一致)。(2)其中生成每個社團名單文件的過程是:先對報名數據按社團名稱進行分類,并對選報同一社團的學生按班級進行升序排序,然后生成各個社團名單文件,如圖b所示。對應的程序代碼如下,請在劃線處填寫合適的代碼。import pandas as pddef read_file(filename): #讀入報名數據的原始文件,并將表中的數據轉換成列表,代碼略def save_file(a): #保存名單到相應社團的Excel電子表格文件 df = pd.DataFrame(a,columns=[″班級″,″姓名″,″選報社團″]) df.to_excel(①________+″.xlsx″,index=False)a = read_file(″社團報名.xlsx″)n = len(a)#按社團名(參照拼音的字母順序)進行升序排序,代碼略#統計各社團人數,存在列表rs中,rs=[[“滑板社”,36],…],代碼略a=[];imin=0;k=0s = 0for i in range(len(rs)): ②________ left,right = s, s+num-1 while left < right: imin = imax = left for k in range(left+1,right+1): if a[k][0] imin=k elif a[k][0]>a[imax][0]: imax = k if imin != left: a[imin],a[left] = a[left],a[imin] if imax == left: ③________ if imax != right: a[imax],a[right] = a[right],a[imax] left = left + 1; right = right-1 ④________ s += num重難點2 利用函數按列進行數據統計1.某單位根據全省各縣市區的公共設施與服務運行情況,編制了“公共服務惠民指數”與“公共設施匹配指數”,現要對該兩項指數進行分析。請回答下列問題:圖a圖b(1)該單位希望在所有縣市區中,篩選出“公共服務惠民指數”低于75分的縣市區,提出預警。各縣市區的指數數據保存在DataFrame對象df中,如圖a所示。實現上述功能的部分Python程序如下:df1 = df[df[″公共服務惠民指數″] < 75]print(″需要被預警的縣市區個數為″,________,″個″)下列語句中,符合要求的為________。(單選,填字母)A.df1.count()B.len(df1)C.df1[″公共服務惠民指數″].sum()(2)根據圖a中數據中的區域代碼列的前4位,可以獲取到該區域所屬的地區,例如“3301”即代表“杭州市”。現需要根據該數據,匹配出各縣市區所屬的地區。實現上述功能的部分Python程序如下,請在程序中劃線處填入合適的代碼。import pandas as pdimport matplotlib.pyplot as pltarea = {″3301″:″杭州市″,″3302″:″寧波市″,......,″3311″:″麗水市″}df = pd.read_excel(″基層智治指數.xlsx″)df.insert(4,″地區″,″″) #在第4列插入“地區”列,值為空for i in df.index: areacode = str(df.at[i,″區域代碼″]) df.at[i,″地區″]=________________df = df.drop(″區域代碼″ ,axis= 1)(3)根據上述df中的地區信息,統計各地區“公共服務惠民指數”與“公共設施匹配指數”的平均值,并根據“公共服務惠民指數”數據繪制如圖b所示的柱形圖,實現該功能的部分Python程序如下:dfg = df.groupby(″地區″).________________dfs = dfg.sort_values( )#設置繪圖參數,代碼略plt.title(″公共服務惠民指數″)plt.bar(dfs.index,dfs[″公共服務惠民指數″])#繪制柱形圖①請在程序中劃線處填入合適的代碼。②程序中的方框中應填入的正確代碼為________(單選,填字母)。A.″公共服務惠民指數″, ascending = TrueB.″公共服務惠民指數″, ascending = FalseC.dfg[″公共服務惠民指數″], ascending = TrueD.dfg[″公共服務惠民指數″], ascending = False2.某校高一學生的社團報名數據存儲在“stbm.xlsx”文件中,如圖a 所示。{'書畫社':52,'動漫社':97,'攝影社':35,'漢學社':38,'法學社':51,'詩詞社':37,'辯論社':43,'音樂社':63,'飛羽社':56,'魔方社':29}圖c(1)統計各社團報名人數,找出報名人數最多的三個社團(不存在并列名次情況)并創建如圖b所示的圖表。實現上述功能的 Python 程序如下,請在劃線處填入合適代碼。import pandas as pdimport matplotlib.pyplot as plt#設置中文字體,代碼略df=pd.read_excel(″stbm.xlsx″)df1=df.groupby(″①__________″,as_index=False).count()#刪除df1的“班級”列,并將列標題“姓名”重命名為“人數”,保存修改結果,代碼略df2=df1.sort_values(″人數″,ascending=False)df3=df2.②________plt.bar(df3.社團,③________)plt.title(″報名人數最多的前三個社團″)plt.show()#將各社團報名人數存入字典stdic并輸出,結果如圖c所示,代碼略(2)受場地限制,每個社團開展活動人數上限為45人。解決方案:超過45人的社團分成若干班級,每班人數按一定規則分配。編程解決社團分班問題,并輸出如圖d所示分班方案,請在劃線處填入合適代碼。{'書畫社':[26,26],'動漫社':[32,32,33], '攝影社':35,'漢學社':38,'法學社':[25,26], '詩詞社':37,'辯論社':43,'音樂社':[31,32], '飛羽社':[28,28],'魔方社':29}圖dfor i in stdic: if stdic[i]>45: n=(stdic[i]-1)∥45+1 num=[]; x=stdic[i]∥n for j in range(n): if j==n-1: num.append(________) else: num.append(x) #將x添加到列表num末尾 stdic[i]=numprint(stdic)(3)若“動漫社”實際報名人數為98人,則利用上述程序段進行分班后得到的結果為__________________________________________________________________(單選,填字母:A.'動漫社':[32,33,33]/B.'動漫社':[32,32,34])。3.小溫對 5 個景區進行網絡問卷調查,問卷中“環境”“硬件”“服務”和“交通”設置的選項及分值均一致,部分界面如圖a所示。導出數據的部分界面如圖b所示,其中數字對應問卷中每題的選項,如數字 i 代表該題的第 i個選項。請回答下列問題。(1)若要統計每份問卷對應景區的評分, 部分代碼如下:#導入相關模塊,讀取如圖b所示的數據,保存到DataFrame對象df中,代碼略qz=[2.5,2,1.5,1,0.5] ________則劃線處的代碼為________(單選,填字母)A.df[″評分″] = qz[df[″環境″]] + qz[df[″硬件″]] + qz[df[″服務″]] + qz[df[″交通″]]B.df[″評分″] = df[[″環境″,″硬件″,″服務″,″交通″]].sum (axis=1)C.df[″評分″] = 0for i in df.index: a= df.at[i,″環境″]; b= df.at[i,″硬件″] c= df.at[i,″服務″]; d= df.at[i,″交通″] df.at[i,″評分″] = qz[a-1]+qz[b-1]+qz[c-1]+qz[d-1](2)找出18~39 歲年齡段游客評分均值最高的景區,請在劃線處填入合適的代碼。jq=[″雁蕩山″,″楠溪江″,″漁寮″,″南麂列島″,″氡泉″]df1 = df[①________]df2 = df1.groupby(″景區″, as_ index=False)[″評分″].mean()df2 = df2.sort_values(″②________″, ascending=False)print(jq[df2[″景區″][0]-1])(3)根據上述 df2 中的評分數據, 繪制如圖 c 所示的垂直柱形圖, 代碼如下:#導入相關模塊, 代碼略jq1 = []ave = df2[″評分″].mean()df2[″均差″] = df2[″評分″] - avefor i in df2.index: jq1.append (jq[df2.at[i,″景區″] - 1])plt.bar(x, y)plt.show()程序加框處的應填入的正確代碼為________(單選, 填字母)。A.x=jqy=df2[″評分″]B.x=df2[″景區″]y=df2[″均差″]C.x=jq1y=df2[″均差″]4.張三同學收集了一個地區 8 月各類共享單車的騎行數據記錄,每天的用戶數據存儲于“shared_bikes.xlsx”文件中,不考慮跨天數據。數據格式如圖a所示,請回答下列問題:(1)cal 函數功能為:讀取騎行時間的小時和分鐘部分,轉換為分鐘格式并返回,如“2022/8/20 6:57”獲取“6:57”轉換為417(6*60+57=417),代碼如下。請在劃線處填入合適的代碼。def cal(s): n = len(s) for i in range(n): if s[i] ==″″: #如果為空格字符 p = i if s[i] ==″:″: q = i t =________ + int(s[q+1:]) return t(2)統計本月各類型單車的每天平均騎行時長,并繪制柱形圖,代碼如下,繪制的圖表如圖b所示,請在劃線處填入合適的代碼。圖bimport pandas as pdimport matplotlib.pyplot as pltdf = pd.read_excel(″shared_bikes.xlsx″)bike = [″哈羅單車″,″摩拜單車″,″美團單車″,″青桔單車″]sm = [0] * 4avg = [0] * 4days = 31for i in ①________: t = cal(df.at[i,″結束時間″]) - cal(df.at[i,″開始時間″]) for j in range(len(bike)): if df.at[i,″APP類型″] == bike[j]: ②________ breakfor i in range(len(bike)): avg[i] = sm[i] / daysplt.figure(figsize = (12,4))x = bikey =③________plt.bar(x,y)plt.show()(3)統計本月各類型單車的騎行次數,下列加框處代碼有錯,可以改正為________(選填字母:(A.max()/B.min()/C.mean()/D.count())n = df.groupby(″APP 類型″, as_index = True).用戶編號.重難點1 利用Pandas批量處理文件1.管理員從該停車系統中導出了 3 月份每天的停車記錄,如圖a 所示,每天的停車記錄內容格式如圖b 所示(進出標記為 0 表示駛入,1 表示駛出,停車記錄已按進出時間升序排列)。圖a車牌 進出時間 進出標記川B·8CC88 2023-3-23-06:09:56 0川A·A98A8 2023-3-23-06:28:04 0川C·9VV99 2023-3-23-06:56:45 0川B·8UU88 2023-3-23-07:01:29 0川C·9VV99 2023-3-23-07:48:01 1圖b為統計停車場3月份每天的收入(只有駛入或駛出記錄的車輛不參與計費),編寫Python程序。(1)定義readdata函數,功能為:讀取某一車牌車輛當天的進出時間記錄,返回該車輛當天的停車總費用。參數 data 為該車牌當天的進出時間記錄。函數代碼如下,請回答下列問題:①程序段中加框處應填入的代碼為________(單選,填字母)。A.data.進出標記[p]==0B.data.進出標記[p-1]==0 and data.進出標記[p]==1C.data.進出標記[p+1]==1D.data.進出標記[p]==0 and data.進出標記[p+1]==1②請在程序段劃線處填入合適的代碼。def catime(t1,t2): #計算時間t1 與時間 t2 之間的時間差并計算本次停車的費用,函數返回停車費用,代碼略。def readdata(data): m=len(data) p=0;cost=0;total=0 while p if : cost=catime(data.進出時間[p],data.進出時間[p+1]) total+=cost p+=1 ②________ return total(2)統計停車場 3 月份每天的收入并繪制柱形圖,部分Python代碼如下,請在劃線處填入合適的代碼。n=31;dic={}for i in range(1,n+1): ①________ fname=″3 月″+str(i)+″日.xlsx″ df=pd.read_excel(fname) df_g=df.groupby(″車牌″).進出標記.count() for k in df_g.index: #只有一條駛入或駛出記錄的車輛不參與計費 if ②________: data=df[df.車牌==k] dic[i]+=readdata(data)plt.title(″某停車場3月份整體收入圖″)plt.bar(dic.keys(),dic.values())plt.show()(3)已知每月分為3個時間段,1-10日稱為上旬,11-20日稱為中旬,21-30(31)日稱為下旬。則由圖c可知,該停車場3月份________(選填:上旬/中旬/下旬)收入總和最高。2.小明為了研究某地近十年每月的溫差變化,編寫Python程序。以2023年4月為例,該月每天的溫度數據分別保存在以8位日期字符串命名的excel文件中,部分文件如圖a所示,每個文件記錄了一天24小時的溫度數據,如圖b記錄了4月28日的數據。圖a圖b(1)定義dv函數,功能為:讀取某天的excel文件,返回當天最高溫度與最低溫度的差值。函數代碼如下,劃線處應填入的代碼為________(單選,填字母)。A.df[″溫度″].head(1)-df[″溫度″].tail(1)B.df[″溫度″].(max()-min())C.df[″溫度″].max()-df[″溫度″].min()D.df[″溫度″].(head(1)-tail(1))def dv(dayfile): df=pd.read_excel(dayfile) diff=____________ return diff(2)定義find函數,功能為:用字典創建DataFrame對象,并篩選出4月份溫差大于13的日期,輸出結果如圖c所示,請在劃線處填入代碼。日期 溫差3 0404 13.19 0410 13.115 0416 13.317 0418 13.827 0428 15.5圖cdef find(r,t): dic={″日期″:r,″溫差″:t} df1=pd.DataFrame(dic) df2=______________ return df2(3)繪制4月份每天的溫差柱形圖,部分Python程序如下,請在劃線處填寫合適的代碼。def tstr(t): if t<10: return '0'+str(t) else: return str(t)td=[];date=[]for i in range(30): dstr=tstr( ①________ ) dayfile='202304'+dstr+'.xlsx' date.append(dayfile[4:8]) td.append(②________)#設置繪圖參數,代碼略plt.bar(date,③________ )plt.show()print(find(date,td))3.小美收集了某電商平臺某年1-12月的“十大”空調品牌的銷售數據,每個月的數據保存在一個csv文件中,文件如圖b所示,分別記錄了對應月份的訂單數據。請回答下列問題:(1)定義get_sales函數,功能為:讀取某月的csv文件,返回某品牌當月的銷售額。函數代碼如下,劃線處應填入的代碼為:________(單選,填字母)。A.df[df['品牌'] == brand] B.df[df['品牌'] == month]C.df['品牌'] == brand D.df['品牌'] == monthimport pandas as pddef get_sales(brand, month): filename = str(month) + '.csv' df = pd.read_csv(filename) #讀取文件 df =________ sales = (df['數量'] * df['單價']).sum() #求出df中所有數量*單價的總和return sales(2)統計十大品牌全年銷售額,并找出銷售額最大的品牌,繪制該品牌的1-12月銷售額的線形圖,部分Python程序如下,請在劃線處填寫合適的代碼。import matplotlib.pyplot as pltbrand_dict={'格力':0,'美的':0,'海爾':0,'奧克斯':0,'海信':0,'三菱重工':0,'日立':0,'華菱':0,'TCL':0,'大金':0}x,y = [],[]max_sales,brandmax =0,''for i in range(1,13): for j in brand_dict: brand_dict[j] += ①__________for i in brand_dict: if brand_dict[i] > max_sales: max_sales = brand_dict[i] ②________for i in range(1,13): x.append( ③________ ) y.append(get_sales(brandmax,i))plt.plot(x,y)plt.show() #生成線形圖如圖c所示圖c(3)由圖c可知,該空調銷售額增量最大的月份是________。4. 一球迷收集了近3個賽季的CBA比賽數據,每個賽季的數據分別保存在獨立文件中,如圖a所示,文件中數據記錄格式如圖b所示,以球員“布萊克尼”的“二分”數據“7.9-16.3”為例,7.9表示二分球平均命中數量,16.3表示二分球平均投籃次數。圖c該球迷想根據歷史賽季數據預測各球隊下個賽季的首發陣容,編寫了如下Python程序,請回答下列問題:(1)定義readData函數,功能為:讀取某賽季的excel文件,返回每個隊員的得分(得分=二分球命中數量*2+三分球命中數量*3+罰球命中數量。函數代碼如下,劃線處應填入的代碼為________(單選,填字母)。A.df[″得分″][i]+=n*cols[col]B.df[″得分″][i]=n*cols[co1]C.df[″得分″]+=n*cols[col]D.df[″得分″]=df.二分*2+df.三分*3+df.罰球import pandas as pddef readData(file): df=pd.read_excel(file) #讀取文件file 中的數據 cols={″二分″:2,″三分″:3,″罰球″:1} for i in range(len(df)): #計算每個隊員的得分 for col in cols: p=df[col][i].find(″-″) #在字符串中找到“-”的位置 n=float(df[col][i][:p]) ________________ return df(2)定義select函數,功能為:篩選各球隊得分最高的5名球員作為首發陣容,并把球員名字及得分存入列表members后返回。其中n號球隊各球員名字存入members[2*n]中,得分存入members[2*n+1]中,請在劃線處填寫合適的代碼。def select(teams) : #teams是字典變量,如:{″浙江″:0,″上海″:1},字典的值代表球隊編號 seasons=[″20-21″,″21-22″,″22-23″] members=[0]*len(teams)*2 df=readData(seasons[0]+″.x1sx″) for season in ①________: file=season+″.xlsx″ df1=readData(file) df=pd.concat([df, df1]) #合并兩個DataFrame對象數據 for team in teams: df1=②________ df1=df1.groupby(″球員″ , as_index=False).mean() #計算各球員平均得分 df1=df1.sort_values(″得分″,ascending=False).head(5) #按得分降序排序并選取前5名 ③________ members[2*n]=df1[″球員″].values members[2*n+1]=df1[″得分″].values return members(3)定義showChart函數,功能為:查詢某球隊的首發陣容,繪制柱形圖,圖表如圖c所示,程序如下,請在劃線處填寫合適的代碼。import matplotlib.pyplot as pltdef showChart(tean, menbers) : n=teams[team] plt.bar(________ ,________) plt.title(team+″隊首發陣容″) plt.show()主程序代碼如下。teams={″浙江″:0,″上海″:1,″山東″:2,″廣東″:3,″北京″:4}members=select (teams)while True: team=input(″輸入球隊:″) if team==″″ : break showChart(team, members)5.李老師收集了 2022 級學生“七選三” 選課意愿數據,每個班的數據分別保存以'xk'+班級為命名的 xlsx 文件中,如圖a所示,每個文件記錄了該班每位學生的選考科目選課情況,如圖b所示。為統計分析全年級“七選三”選課意愿數據,編寫 Python 程序,請回答下列問題:(1)讀取各班 xlsx 文件,并合并到一個 DataFrame 對象。程序代碼如下,請在劃線處填入合適的代碼。def data(i): i=i+1 if ①________: t='0'+str(i) else: t=str(i) df_t=pd.read_excel('xk'+t+'.xlsx') return df_tn=12df=pd.DataFrame()for i in range(n): df=df.append(②________,ignore_index=True) #在df末尾追加一個DataFrame(2)統計“技術”選課人數占總人數的比例,并作出各個科目選課人數的柱形圖。程序代碼如下,請在劃線處填入合適的代碼。圖ckm={'物理':0,'化學':0,'生物':0,'政治':0,'歷史':0,'地理':0,'技術':0}for i in range(len(df)): xk=df['選課'][i].split(',') #將'選課'字符串以逗號分隔出來 for j in xk: ①________print('選考技術占比: '+str(round(②________*100,2))+'%')df_km=pd.DataFrame({'科目':km.keys(),'人數':km.values()}) #轉換為 DataFrameplt.title('選考各科目人數對比圖')plt.bar(③________,df_km['人數'],label='各科目人數')plt.legend()plt.show()(3)分析圖c可知,選課人數最多的三門科目是________________。6.某同學收集了部分城市2022年4月每天24小時空氣質量數據,按日分別保存在csv文件中,部分文件如圖a所示。數據格式如圖b所示。請回答下列問題:圖a圖b(1)定義函數 avg,功能是讀取某天的數據文件,計算該天空氣質量指數(AQI) 的平均值并返回,代碼如下。請在劃線①處應填入合適的代碼。def avg(filename): df=pd.read_csv(filename) df1=df[df.columns[2:]] #取類型及其后的所有列 g=df1.groupby(①________,as_index=False).mean() return ②________劃線②處應填入的代碼為________(單選,填字母)。A.df[df.類型=='AQI']B.df1.AQI C.g.AQID.g[g.類型=='AQI'](2)統計本月各城市空氣質量最長連續優、良的天數(按照環境空氣質量標準,空氣污染指數 AQI≤50為優級,AQI≤100 為良好),代碼如下,繪制的圖表如圖 c 所示。請在劃線處填入合適的代碼。圖cimport pandas as pdimport matplot1ib.pyplot as pltn=10 #城市個數count=[0]*ndaymax=[0]*nfor i in range(1, 31): day=str(i) if len(day) <2: day='0' +str(i) daydata=' 202204' +day+' . csv' dayaqi=avg(daydata) city=dayaqi.columns[1:n+1] for j in range (n) : t=city[j] if dayaqi.at[0,t] <= 100: ①________ else: if count[j]>daymax[j]: daymax [j]=count[j] count[j]=0 for k in range (n): if count [k]>daymax[k]: ②________print (daymax)p1t.figure(figsize=(12,4))x= ③________y=daymaxplt.bar(x, y)p1t.show()重難點2 利用函數按列進行數據統計1.某競賽獲獎名單已公布,現要對獲獎情況進行數據處理和分析。請回答下列問題: 圖a 圖b(1)將獲獎名單讀取到DataFrame對象df中,如圖a所示,若要編寫Pandas程序分析出浙江省內獲得滿分400分的總人數。下列方法正確的是________(單選,填字母)。A.從df中篩選出省份為“浙江”的數據df1,再從df1中篩選出總分為“400”的數據df2,最后對df2中的“姓名”數據列使用count()函數統計出總人數B.對df中數據按“總分”降序排列并保存到df1中,再從df1中篩選出省份為“浙江”的數據df2,最后對df2中的“姓名”數據列使用sum()函數統計出總人數C.對df中數據按“總分”為關鍵字進行分組,并使用count()函數統計出總人數,得到數據df1,再從df1中篩選出省份為“浙江”的總人數(2)提取獲獎名單中的部分數據列,結果如圖b所示。小陸想統計各省份一等獎獲獎學生的準考證號,存儲在字典dic中,h為一等獎獲獎分數線。實現上述功能的部分python程序如下,請在劃線處填入合適的代碼。import pandas as pd#讀取如圖b所示數據,保存到DataFrame對象df中,代碼略#將DataFrame對象df轉換為列表lst,代碼略#列表lst的值為[[″北京″,″BJ-0032″,400],…,[″江蘇″,″JS-0009″,350],[″四川″,″SC-0003″,384]]h = int(input(″輸入一等獎獲獎分數線″))i = 0s =″″dic = { } #字典 dic 中的鍵為省份名稱,值為一等獎獲獎學生的準考證號while i < len(lst): if ①________: city = lst[i][0] if city in dic : dic[city] +=″,″+lst[i][1] else: ②____________ i += 1(3)獲獎名單新增“獲獎等級”數據列,存儲在文件“data.xlsx”,如圖c所示,小陸想分析出一等獎獲獎人數最多的前5個省份(沒有并列情況),并繪制如圖d所示的柱形圖,實現該功能的部分Python程序如下。 圖c圖dimport pandas as pdimport matplotlib.pyplot as pltplt.rcParams[″font.sans-serif″] = [″SimHei″] #設置圖表顯示中文字體df = pd.read_excel(″data.xlsx″)df1 =①________ #選取相應的一等獎數據df2 = df1.groupby(″省份″).count() #分組統計總人數df2.rename(columns = {″姓名″:″獲獎人數″}, inplace = True) #更改列標題名稱g = df2.sort_values(″獲獎人數″, ascending = False).head(5)plt.title(″一等獎獲獎人數最多的前 5 個省份″)plt.bar( ②________ ) #繪制柱形圖plt.ylabel(″獲獎人數″)plt.show()①請在程序中劃線處填入合適的代碼。②程序的劃線處中應填入的正確代碼為________(單選,填字母)。A.g.省份,g.獲獎人數 B.df2[″省份″],df2[″獲獎人數″]C.g.index,g.獲獎人數 D.df2.index,df2.獲獎人數2.為了督促學生寒假堅持體育鍛煉,老師采用線上打卡的方式收集學生鍛煉情況,數據如圖a所示。圖a圖b為統計冬鍛完成情況,編寫 Python 程序。請回答下列問題:(1)定義outdata函數,其中參數dftmp是DataFrame數據類型,數據由圖a所示的Excel表導入。函數功能是:統計每天每個學生的鍛煉項目個數,返回含有“學籍號”、“姓名”和“項目個數”信息的二維列表。函數代碼如下,劃線處應填入的代碼為________(多選,填字母)。A.dftmp.at[i,j]==″√″B.dftmp[i][j]==″√″C.dftmp.at[j,i]==″√″D.dftmp[j][i]==″√″def outdata(dftmp): a=[] for i in dftmp.index: #dftmp 的行索引 itemn=0 for j in dftmp.columns[4:]: #dftmp 中從“跑步”開始的列標題 if ______________ : itemn+=1 a.append([str(df[″學籍號″][i]),df[″姓名″][i],itemn]) return a(2)冬鍛打卡成功的標準為累計運動 15 天,每天鍛煉項目達到 3 項及以上。統計輸出寒假體育鍛煉達標的學生名單,并制作四個項目的運動次數對比圖,部分界面如圖b和圖c所示。部分Python程序如下,請在劃線處填寫合適的代碼。圖cimport pandas as pdimport matplotlib.pyplot as pltdf=pd.read_excel(″sport.xls″)lst=outdata(df)print(″冬鍛打卡成功名單:″)i=0;flag=[False]*len(lst)while i if: xjh=lst[i][0] flag[i]=True ①________ for j in range(i+1,len(lst)): if lst[j][0]==xjh and lst[j][2]>=3: flag[j]=True days+=1 if days>=15:print(lst[i][0]+″/″+lst[i][1]+″/″+str(days)+″天″) ②________ydl=df.count() #統計各列非空單元格數量,結果為Seriesitem=[″跑步″,″跳繩″,″俯臥撐″,″仰臥起坐″]nums=③________plt.bar(item,nums,label=″運動次數″)(3)程序加框處代碼有錯,請改正。3.小帥收集了2023年的銷售數據并存儲在″超市銷售數據.csv″文件中,部分數據如圖a所示。分析某月的銷售情況,柱形圖如圖b所示。部分Python程序如下:顧客編號,大類名稱,銷售日期,小類名稱,商品類型,單位,銷售數量,商品單位,銷售金額 5,糧油,20230101,番茄醬,一般商品,瓶,1,6.7,6.7 10,日配,20230101,冷藏果粒酸乳,一般商品,盒,1,8.9,5.9 26,沖調,20230101,麥片/粉,一般商品,袋,1,27.7,27.7 31,洗化,20230101,洗衣皂,一般商品,塊,1,4.9,4.9 31,洗化,20230101,軟抽紙巾,一般商品,提,1,9.7,6.9 49,蔬果,20230101,花果,生鮮,千克,0.902,9.96,8.98 8,日配,20230101,利樂磚純奶,一般商品,提,1,65,49 15,家居,膠棉拖把,一般商品,把,1,70,70 50,休閑,20230101,軟糖,一般商品,袋,1,10.9,10.9 1,蔬果,20230101,芽菜,生鮮,千克,0.456,2.78,1.27 5,蔬果,20230101,鮮調味,生鮮,千克,0.24,9.6,2.3 2,洗化,20230101,無芯紙,一般商品,提,1,24.9,18.9 9,休閑,20230101,趣味/休閑,一般商品,盒,1,6.9,6.9 46,蔬果,20230101,蘋果類,生鮮,千克,1.776,4.98,8.84圖a圖bimport pandas as pdimport matplotlib.pyplot as pltdf=pd.read_csv(″超市銷售數據.csv″) #讀取文件中的數據df.insert(0,″月份″,″″) #插入列for i in(1)________: data=str(df.at[i,″銷售日期″]) #通過行標簽和列標簽選取單個值 df.at[i,″月份″]=data[4:6]m=int(input(″請輸入需查詢的月份:″))if m>=10: month=str(m)else: month=″0″+str(m)g=df[①________] #篩選月份數據g=g.groupby(″大類名稱″,as_index=False)[″銷售金額″].sum() #分組求和g=x=g[″大類名稱″]y=②________plt.bar(x,y) #繪制柱形圖#設置繪圖參數,顯示如圖b所示的柱形圖,代碼略請回答下列問題:(1)為提取“銷售日期”中月份數據,劃線處應填入的代碼是________(單選,填字母)。A.df.index B.df.values C.df.columns(2)請在程序中劃線①②處填入合適的代碼。(3) 加框處實現按“銷售金額”降序排列后取前10項,下列代碼中能正確實現的有________(多選,填字母)。(注:全部選對的得2分,選對但不全的得1分,不選或有選錯的得0分)A.g.sort_values(″銷售金額″,ascending=False).tail(10)B.g.sort_values(″銷售金額″,ascending=False).head(10)C.g.sort_values(″銷售金額″,ascending=True)[:11]D.g.sort_values(″銷售金額″,ascending=False)[:10]4.小陳在氣象部門得到了一份2022年不同城市的月平均日照時數(單位:kW·h/m2/day)數據,存放在Excel文件“日照.xlsx”中。部分界面如圖所示。圖a請回答下列問題:(1)第1步,小陳編寫了如下代碼。import pandas as pddf = pd.read_excel(″日照.xlsx″)mdays = [31,28,31,30,31,30,31,31,30,31,30,31]months = list(df.columns)for i in df.index : s = 0 for j in range(12): m = df.at[i,months[j +1]] s += mdays [j] s += m*mdays[j] df.at[i,″年度平均″]= round(s/365,2)該程序實現的功能是________。(2)第2步,僅考慮平均日照時數因素,選出最適合用光伏發電給智能農業大棚提供能源的十個城市。劃線處應填入的代碼為________(單選,填字母)。df=________A.df.sort_values(″城市名″,ascending=False).head(10)B.df.sort_values(″城市名″).tail(10)C.df.sort_values(″年度平均″,ascending=False)[:10]D.df.sort_values(″年度平均″,ascending=False).tail(10)#輸出結果如圖b所示,代碼略年度平均最高的10個城市為: 日喀則地區 5.83 阿里地區 5.66 三沙市 5.57 山南地區 5.53 拉薩市 5.53 那曲地區 5.11 昌都地區 4.91 海西蒙古族藏族自治州 4.88 和田地區 4.84 攀枝花市 4.83圖b(3)小陳想在家鄉溫州建一個智能大棚,采用光伏發電加蓄電設備供電,面積為1平方米的光伏板容量約為0.3 kW/塊,光伏的充放電效率為80%,大棚每天消耗的最低電能約為30 kW·h,為確保每月能正常供電,需要1平方米的光伏發電板共①________塊。(日均發電量=電池板的容量/塊×塊數×平均日照時數×充放電效率)建設光伏發電設備前要先獲得當地的平均日照時數情況,小陳通過如下代碼獲取相關數據。程序運行界面如圖c所示:圖cres=df[df[″城市名″]==″溫州市″]res=res.values[0][1:13].②________print(″溫州市月平均日照最小值為”,res)5.小周要統計高二年級各班的行為規范得分情況,部分扣分數據如圖a所示。圖a(1)觀察數據,發現存在重復扣分的記錄,如圖a第2、3行所示。現需對數據進行整理,以下操作合理的是____(單選,填字母)。A.對班級、記錄員均相同的記錄去重B.對日期、關聯學生、項目名稱均相同的記錄去重C.對關聯學生、項目名稱、項目扣分均相同的記錄去重(2)如圖a第4行“關聯學生”所示,多名學生信息以分號分隔集中登記。現需要將這些關聯學生信息進行拆分,每位學生各一條記錄。實現拆分功能的部分Python程序如下,請在劃線處填入合適的代碼。import pandas as pddf=pd.read_excel(″高二年級學生行規扣分明細.xlsx″)i=0while i s=①________ t=0 for j in range(len(s)): if s[j]==″;″: df=pd.concat([df, df[i:i+1]],ignore_index=True) #將當前記錄復制并添加到表末尾,concat函數用于連接兩個DataFrame對象 df.at[len(df)-1,″關聯學生″]=s[t:j] df.at[i,″關聯學生″]=s[j+1:] ②________ i=i+1圖b(3)該校高二年級共有16個班級,統計各班的行為規范得分(班級行為規范得分=100分-本班所有學生扣分),并繪制如圖b所示的柱形圖,實現該功能的部分Python程序如下,請在劃線處填入合適的代碼。import matplotlib.pyplot as pltpoint=df.groupby(″①________″,as_index=False).sum()cla=[100]*16for i in range(len(point)): m=point.at[i,″班級″] cla[m-1]-=point.at[i,″項目扣分″]x=[str(i)+″班″ for i in range(1,17)]y=②________#設置繪圖參數,代碼略plt.bar(x,y)plt.show()6.某中學“7選3”選考科目的選科數據存儲在Excel文件“選科數據.xlsx”中,部分數據及格式如圖a所示。圖中“1”表示選擇該科目為選考科目。現對數據進行統計分析,編寫Python程序,請回答下列問題。圖a(1)定義fenban函數,功能為:根據選考科目選報的總人數allrs及該科目最大班額maxbrs,計算需開設的班級數。函數代碼如下,請在劃線處填入合適的代碼。def fenban(allrs,maxbrs): bjnum=allrs∥maxbrs if ________________: bjnum+=1 return bjnum(2)統計7選3各科的選報人數,輸出各科的選報情況及開班情況,如圖b所示。部分程序代碼如下,請在劃線處填入合適的代碼。物理 人數:398 班級數:10 化學 人數:408 班級數:11 生物 人數:133 班級數:4 政治 人數:261 班級數:7 歷史 人數:244 班級數:7 地理 人數:361 班級數:10 技術 人數:136 班級數:4圖bimport pandas as pddf=pd.read_excel(″選科數據.xlsx″)km=[″物理″,″化學″,″生物″,″政治″,″歷史″,″地理″,″技術″]m=40 #每個班的最多人數,班額bj=[0]*7xkrs=[0]*7 #存儲選考科目的選報人數p=0for j in km: __①________ for i in range(len(df)): if df.at[i,j]==1: cnt+=1 ②________ bj[p]=fenban(cnt,m)p=p+1for i in range(7): print(km[i],″人數:″,xkrs[i],″班級數:″,bj[i])(3)繪制選考科目選科人數情況的柱形圖,部分Python程序如下,請在劃線處填寫合適的代碼。import matplotlib.pyplot as pltx=kmy=__________________plt.bar(x,y)#繪制柱形圖#設置繪圖參數,顯示如圖c所示柱形圖,代碼略圖c(4)下列程序能實現按班級統計各班選報技術學科人數的是________(單選,填字母)。A.jsrs_bj=df.groupby(″班級″).″技術″.count()B.jsrs_bj=df.sort_values(″班級″).count()C.jsrs_bj=df.groupby(″班級″)[″技術″].count()D.jsrs_bj=df.groupby(″班級″).技術.mean()7.第19屆杭州亞運會已完美落幕,亞運會賽事以“杭州為主,全省共享”的原則分布在杭州、寧波、溫州、湖州、紹興、金華各地。大會共有40個大項,61個分項,最終誕生了481塊金牌。小李作為一名體育愛好者想重溫大會賽程安排,他從杭州亞運會的官網上采集了相關數據,整理后存儲在“杭州第19屆亞運會總賽程.xlsx”文件中。如圖a所示(0表示有賽事但不產生金牌,其他數字表示當天產生的金牌數)。圖a為了更清楚地了解相關賽事信息,小李編寫了Python程序,請回答以下問題。(1)足球是小李最關注的大項,為了解足球的賽程安排,劃線處應填入的代碼為________(單選,填字母)A.df.大項==″足球″ B.df[″大項″==″足球″]C.df[df.大項==″足球″] D.df[df[″大項″]==足球]import pandas as pddf=pd.read_excel(″杭州第 19 屆亞運會總賽程.xlsx″)df2=________print(df2)(2)足球項目的比賽分布在杭州等城市的八個場館,了解各個場館舉辦足球賽事的具體場次,找到連續舉辦足球賽事最多的場館,如圖b所示。程序代碼如下,請在劃線處填入合適的代碼。黃龍體育中心體育場 [9/19, 9/21, 9/24, 9/27, 9/28, 10/1, 10/4, 10/6, 10/7] 臨平體育中心體育場 [9/19, 9/21, 9/22, 9/24, 9/25, 9/28, 9/30, 10/3] 上城體育中心體育場 [9/20, 9/22, 9/24, 9/25, 9/27, 9/28, 10/1, 10/3, 10/7] 蕭山體育中心體育場 [9/19, 9/20, 9/21, 9/22, 9/24, 9/25, 9/27, 9/28, 10/1, 10/4] 金華體育中心體育場 [9/19, 9/21, 9/24, 9/27] 浙江師范大學東體育場 [9/19, 9/21, 9/24, 9/27] 溫州奧體中心體育場 [9/21, 9/22, 9/24, 9/25, 9/27, 9/28, 9/30] 溫州體育中心體育場 [9/22, 9/24, 9/25, 9/27, 9/28, 9/30] 連續舉辦足球賽事最多的場館:蕭山體育中心體育場圖bdic={}max=0;maxsta=″″lst=df2.競賽場館.tolist() #將數據轉換為列表for i in lst: dic[i]=[]for i in df2.index: c=0 sta=df2[″競賽場館″][i] for j in df2.columns[2:-3]: if df2.at[i,j]==0 or df2.at[i,j]==1: ①________ c=c+1 if c>max: max=c;maxsta=sta else: __②________for i in dic: print(i,dic[i])print(″連續舉辦足球賽事最多的場館:″,③________ )(3)足球在亞運會期間總共產生兩枚金牌,統計分析其他大項產生的金牌總數,找出產生金牌總數最多的十個大項,并繪制圖形如圖c所示。程序代碼如下,請在劃線處填入合適的代碼。圖cimport matplotlib.pyplot as pltplt.rcParams['font.sans-serif']=['simhei'] #圖表中文標簽顯示為黑體grp=df.groupby(①________ , as_index=False).金牌總數.sum()grp=grp.sort_values(″金牌總數″,ascending=False).②________x=grp.大項y=grp.金牌總數#設置圖表參數,代碼略。專題9 pandas數據統計學習目標 1.對DataFrame對象按列進行公式計算,描述DataFrame對象數據以字典中鍵為列的存儲形式;2.對每個鍵對應一列數據多個值進行切片,掌握取出不同數據區域內容的方法;3.運用函數統計對象的平均值等操作,運用排序函數對數據進行有序排列;4.運用groupby函數對數據進行分組的方法,并在分組的基礎上進行數據統計.Pandas有Series和DataFrame兩種對象,這兩種對象均有index和values屬性,Series對象的values是一維的,DataFrame的values是二維的,因此DataFrame對象比Series對象多一個columns屬性,可以理解為index表示行號,columns表示列名。pandas處理的對象主要是DataFrame,取出DataFrame中的一列,降維為Series對象,可以用list函數轉換為列表,對某列的值進行切片,可以轉換為一個數值。可以對記錄選取、篩選和分組操作,靈活地區分不同類型的數據,可以對記錄進行排序操作,實現數據的有序顯示。可以對各條記錄的字段進行遍歷,統計符合要求字段值的數量、總和、平均值以及最值。(2024年1月浙江省選考)某學院舉行運動會,比賽設跳高、100米等項目,每個項目分男子組和女子組。現要進行報名數據處理和比賽成績分析。請回答下列問題: (1)運動會報名規則為:對于每個項目的男子組和女子組,每個專業最多各報5人(如“軟件工程”專業在男子跳高項目中最多報5人)。軟件工程專業的報名數據保存在DataFrame對象df中,如圖a所示。若要編寫Python程序檢查該專業男子跳高項目報名是否符合規則,下列方法中,正確的是________(單選,填字母)。A.從df中篩選出性別為“男”的數據dfs,再從dfs中篩選出項目為“跳高”的數據,判斷篩選出的數據行是否超過5行B.對df中數據按性別排序并保存到dfs中,再從dfs中篩選出項目為“跳高”的數據,判斷篩選出的數據行是否超過5行C.從df中篩選出項目為“跳高”的數據dfs,判斷dfs中是否有連續5行以上的男生數據(2)運動員比賽成績的部分數據如圖b所示。根據已有名次計算得,第1名至8名分別計9,7,6,5,4,3,2,1分,第8名之后計0分。實現上述功能的部分Python程序如下,請在程序中劃線處填入合適的代碼。import pandas as pdimport matplotlib.pyplot as plt#讀取如圖b所示數據,保存到 DataFrame 對象 df1 中,代碼略f = [9, 7, 6, 5, 4, 3, 2, 1]for i in range(0,len(df1)): rank = df1.at[i,″名次″] #通過行、列標簽取單個值 score = 0 if rank <= 8: ______________df1.at[i,″得分″] = score(3)根據上述 df1 中的得分數據,統計各專業總分,繪制如圖 c 所示的柱形圖,實現該功能的部分Python程序如下:df2 = dfl.groupby(″________″,as_index=False).sum() #分組求和#設置繪圖參數,代碼略plt.bar(x,y)①請在程序中劃線處填入合適的代碼。②程序的方框中應填入的正確代碼為________(單選,填字母)A.x=df1[″專業″]y=df1[″總分″]B.x=df2[″專業″]y=df2[″得分″]C.df1[″專業″]=″專業″df1[″總分″]=″總分″D.df2[″專業″]=″專業″df2[″得分″]=″得分″答案 (1)A (2)score=f[rank-1]或score=f[int(rank)-1] (3)①專業 ②B解析 本題考查利用Pandas模塊進行數據處理。(1)A選項分二次篩選后,得到該專業男生參加跳高的人數,并檢查數據。(2)名次為1-8的可以在列表f中取出對應的得分,但列表的索引下標是從0開始的。(3)①從圖表中可以看出是按″專業″進行分組;②圖表橫軸為專業名稱,縱軸為各專業的得分情況。重難點1 利用Pandas批量處理文件Pandas主要功能是計算一個集合對象中某個字段的記錄數量、總和、平均值和最值(最大值或最小值)。這個集合可以是通過篩選找到符合處理條件的數據(子集),也可以是通過分組,將某列相同字段值的記錄組合在一起,形成一個個的分組,再分別統計各個分組的數量、和、平均值和最值。這些功能Excel軟件也可以實現,但若是數據分布在多個數據文件時,Excel軟件就要手工不斷地打開數據,重復進行統計,而Pandas可以通過算法,利用循環結構,將這些操作讓計算機自動完成。例題 小紅收集了部分城市2021年全年每天PM2.5、PM10、CO濃度數據,每天的數據分別保存在以8位日期字符串命名的CSV文件中,部分文件如圖a所示,每個文件記錄了一天24小時的監測數據,示例如圖b所示。為統計分析城市A全年各月份PM2.5的月平均濃度(當月的日平均濃度的平均值),編寫Python程序。請回答下列問題:(1)定義pmday函數,功能為:讀取某天的CSV文件,返回城市A當天PM2.5的日平均濃度。函數代碼如下,劃線處應填入的代碼為________(單選,填字母)。A.df['類型']=='PM2.5'B.df['類型'=='PM2.5']C.df[df['類型']]=='PM2.5'D.df[df['類型']=='PM2.5']import pandas as pddef pmday(dayfile): df = pd.read_csv(dayfile) #讀取文件dayfile中的數據 df =________ return df['城市A'].mean() #返回城市A當天PM2.5的日平均濃度(2)統計城市A各月份PM2.5的月平均濃度并繪制線形圖,部分Python程序如下,請在劃線處填寫合適的代碼。import matplotlib.pyplot as plt def tstr(t):if t<10: retrun '0'+str(t) else: retrun str(t)pm = [0] * 12mdays=[31,28,31,30,31,30,31,31,30,31,30,31] #2021年每月天數for m in range(12): sm = 0 mstr = tstr(m+1) for d in range(①________): dstr = tstr(d+1) dayfile = '2021' + mstr + dstr + '.csv' sd = pmday(dayfile) ②________ pm[m] = sm/mdays[m]x = [1,2,3,4,5,6,7,8,9,10,11,12]y=③________plt.plot(x,y) #繪制線性圖#設置繪圖參數,顯示如圖c所示線形圖,代碼略(3)城市A 2021年PM2.5年平均濃度為34.6微克/立方米。由圖c可知,城市A 2021年PM2.5月平均濃度超過年平均濃度的月份共________個。明考向 本題考查利用Pandas進行數據統計精點撥 (1)可以通過布爾型數據選取滿足條件的行。(2)計算各月份PM2.5濃度的平均值,可以累加各月的每天PM2.5濃度的平均值。變量dayfile表示每天的數據文件名,題干已經提示“每天的數據分別保存在以8位日期字符串命名的CSV文件”,調用函數pmday(dayfile) ,可以得到當天PM2.5的日平均濃度,并保存于變量sd。當月的各天PM2.5的日平均濃度需要累加起來,最后求均值。③空橫坐標為月份,縱坐標為PM2.5月平均濃度,即列表pm的數據。(3)超過年平均濃度的月份為1、2、3、4、11月答案 (1)D (2)①mdays[m] ②sm += sd ③pm (3)5變式 學校食堂以服務質量進行了調查問卷,調查項目共 5 項(具體內容略)。12個班級的調查結果分別存儲在“dy01.csv”“dy02.csv”等文件中(如圖a所示),每個文件部分界面如圖b所示。現需要分析每個問題選“A”的情況,采用Python編制程序代碼,請回答下列問題。(1)定義fun_A函數實現統計某個班級5個問題的選“A”的人數,請在劃線處填入合適代碼。import pandas as pddef fun_A(file): df=pd.read_csv(file) A_list=[] for col in df.columns[1:]: ________________ A_list.append(c) return A_list(2)統計12個班級每個問題選“A”的總人數,請在劃線處填入合適代碼。ans_list=[]s=″010203040506070809101112″for i in range(0,len(s)-1,2): filename=″dy″+ ①__________+″.csv″ res= fun_A(filename) ans_list.append(res)x=[″問題1″,″問題2″,″問題3″,″問題4″,″問題5″]y=[0,0,0,0,0]for i in range(5): s=0 for j in range(12):②__________ y[i]=s(3)根據上述統計的得分數據,統計每個問題選“A”的數量,繪制如圖 c 所示的柱形圖,請在劃線處填入合適代碼。圖cimport matplotlib.pyplot as pltplt.title(″每個問題選A的總人數″)plt.bar(①__________,②__________,label='A 選項')plt.legend()plt.show()答案 (1)c=len(df[df[col]==″A″])(2)①s[i:i+2] ②s+=ans_list[j][i] (3)x,y解析 本題考查利用Pandas進行數據統計。(1)df.columns[1:]依次對應5個問題的名稱,對每個問題進行篩選,找出選A的記錄并統計數據,賦值給c,再將c添加到列表A_list中。(2) ①12個班級的班名存儲在字符串s中,每個班名占兩個數字,變量i表示每個班名的起始索引。②ans_list是一個二維數組,共12個元素,分別存儲每個班5個問題的選A的人數,現要統計每個問題選A的總和,因此變量i是ans_list數組的列索引,變量j是ans_list數組的行索引。(3)圖表的橫軸為問題的名稱x,縱軸為各個問題選A的總人數y。重難點2 利用函數按列進行數據統計DataFrame是Pandas處理的主要對象,index屬性記錄了每行記錄所在的行索引,columns屬性記錄每列的名稱。df.列名就可以表示該列所有的數據的集合,可以運用函數計算一個集合對象的記錄數量、總和、平均值和最值(最大值或最小值)。通過篩選找到符合處理條件的數據(子集)集合,再對集合進行求和等計算。通過分組,將某列相同字段值的記錄組合在一起,形成一個個的分組,再分別統計各個分組的數量、和、平均值和最值。例題 小明通過調查問卷收集了食堂滿意度情況數據,保存在“data.csv”文件,如圖a所示。圖a圖b為統計分析每個調查項目不同選項的人數及不滿意率,編寫Python程序。請回答下列問題:(1)統計每一項調查內容的總票數、滿意、一般及不滿意人數,程序運行結果如圖b所示,import pandas as pdimport matplotlib.pyplot as plt #導入模塊df=pd.read_csv(″data.csv″,encoding=″utf-8″)#讀取csv文件中的數據cols=df.columns[1:]poll=len(df)data= {″調查項目″:[],″總票數″:[],″滿意″:[],″一般″:[],″不滿意″:[]}for colname in cols: dfc=df.groupby(①__________,as_index=False)[″序號″].count() data[″調查項目″].append(colname) data[″總票數″].append(poll) for j in dfc.index: name=dfc.at[j,colname] data[name].append(②__________)df2=pd.DataFrame(data) ; print(df2)(2)計算每個項目的“不滿意率”(=“不滿意”/“總票數”*100),并使用柱形圖分析每個項目的“不滿意率”情況,如圖c所示,請在劃線處填入合適的代碼。圖cdf2[″不滿意率(%)″]=①__________x=②__________y=df2[″不滿意率(%)″]plt.figure(figsize=(8,4))pl.title(″食堂調查問卷不滿意率(%)情況″)plt.bar(x,y,label=″不滿意率(%)″)plt.legend()思維點撥明考向 本題考查利用Pandas進行數據統計精點撥 (1)①一共有飯菜質量、飯菜價格等6個項目,每個項目都有滿意、一般和不滿意三個選項,因此需進行6次對不同項目進行分組統計,cols為項目名稱的集合,colname是每個項目的名稱,因此需按colname進行分組并統計各個選項的個數。以飯菜質量為例,得到的dfc對象如表所示。 飯菜質量序號0滿意421一般5122不滿意65②dfc對象是每個項目colname的滿意、一般和不滿意3個項目的投票數,遍歷該對象,name是每個選項的名稱,因此需將每個選項的值添加到字典中去。 (2)根據字典data創建了一個df2對象,①將在df2對象中新增"不滿意率(%)"列,其值計算方法為不滿意選項數除以總得票數,在圖表中可知,其值大于1,因此需乘以100。②創建圖表的x軸為各個調查項目答案 (1)①colname ②dfc.at[j,″序號″]或dfc[″序號″][j]或dfc.序號[j] (2)①df2[″不滿意″]/df2[″總票數″]*100或df2[″不滿意″]/po1l*100或df2.不滿意/df2.總票數*100或df2.不滿意/pol1*100或其他等價答案 ②df2[″調查項目″]或df2.調查項目變式 某學校開設選修課并在期末讓學生對其進行滿意度調查,選修課分藝術、體育、語言、計算機、職業技能等領域。現要進行報名數據處理和滿意度分析, 請回答下列問題:圖a圖b(1)選修課開設的條件為:報名人數大于20人。其中計算機類選修課的報名數據保存在DataFrame對象df中,如圖a所示。若要編寫Python程序檢查其中第1學期的“數字視音頻處理”選修課是否符合開設條件,下列方法中,不正確的是________(單選,填字母)。A.對df中數據按開設學期排序并保存到dfs中,再從dfs篩選出選修課名稱為“數字視音頻處理”的數據,判斷篩選出的數據行是否超過20行B.從df中篩選出選修課名稱為“數字視音頻處理”的數據dfs,再對dfs按開設學期進行升序排序,判斷數據前21行的開設學期是否是第1學期C.從df中篩選出選修課名稱為“數字視音頻處理”的數據dfs,再按開設學期分組統計個數,判斷第1學期的個數是否超過20(2)計算機類選修課學生的滿意度調查部分數據如圖b所示。滿意度分3個等級:A.滿意、B.一般、C.不滿意,分別計1分、0分、-1分,基礎分為100分。實現計算各選修課的滿意度功能的部分Python程序如下,請在劃線處填入合適的代碼。import pandas as pdimport matplotlib.pyplot as plt#讀取如圖b所示數據,保存到DataFrame對象df1中,代碼略score=[1,0,-1]for i in range(0,len(df1)): rank=df1.at[i,″滿意度″] ①________ df1.at[i,″得分″]=marka=df1.groupby(″選修課名稱″,as_index=False)[″得分″].②________for i in range(0,len(a)): a.at[i,″得分″]+=100(3)根據滿意度進行降序排序,繪制如圖c所示的柱形圖,實現該功能的部分Python程序如下:圖ca=a.sort_values(″①__________″,ascending=False)#設置繪圖參數,代碼略x=②________y=a[″得分″]plt.bar(x,y) #繪制柱形圖答案 (1)A (2)①mark=score[ord(rank)-ord(″A″)]或 mark=score[ord(rank)-65] ②sum() (3)①得分 ②a[″選修課名稱″]或 a.選修課名稱解析 本題考查利用Pandas進行數據統計。(1)A選項篩選出的數據行包含其他學期的記錄。(2)①滿意度的等級依次為ABC,對應score中3個得分,需將ABC轉換成012的索引,并在score列表中取出相應的值。②求出每門選修課的得分之和,因此該處為求和函數。(3)①從圖上來看,是按得分降序排列。②圖表的橫軸為各門選修課的名稱,需要從排好序的a對象中取出選修課名稱列的內容。重難點1 利用Pandas批量處理文件1.高一年級(9個班級)進行“七選三”預選科。每個班一個Excel文件(如圖a所示)存儲預選科數據。數據表中“1”代表學生選擇該科目,空白代表學生未選擇該科目(某班部分選科數據如圖b所示)。請回答下列問題。圖a圖b(1)定義如下函數check(dfs)檢查選考科目數是否有誤,其中參數dfs為DataFrame對象,由如圖b所示Excel數據導入。返回值erlst為列表,列表元素數據類型為整型,表示錯誤數據行對應的學生序號(例如第6行學生“戴*躍”的序號為5)。def check(dfs): erlst = [] for i in range(len(dfs)):xk_sum = 0 for j in dfs.columns[2:]: dyg = ①________ if dyg == 1: xk_sum += dyg if xk_sum != 3: erlst.append(②________)return erlst①在程序中劃線處填入的正確代碼為________(單選,填字母)。A.dfs.at['i','j'] B.dfs.at['j','i']C.dfs.at[i,j] D.dfs.at[j,i]②在程序中劃線處填入合適的代碼。(2)讀取每個班級的Excel選科數據,若檢查無誤,則統計每個班級同時選報“物理”和“化學”學科的人數,存儲在字典ans中。實現該功能的Python程序如下:import pandas as pdans = {}for i in range(1,10): filename = str(i)+'. xlsx' df =pd.read_excel(filename) errlist = check(df) if errlist != []: print(″請檢查文件″, filename,″中序號為″, errlist,″的學生″) else: ①__________ #篩選同時選擇物理和化學的數據記錄存儲在 df1中 ans[str(i)+'班'] = [②________] #形如{“1班”:[41]}①在程序劃線處應填入的正確代碼段為________(多選,填字母)。(注:全部選對的得 2 分,選對但不全的得1分,不選或有選錯的得 0 分)A.df1 = df[df['物理']==1]df1 = df1[df1['化學']==1]B.df1 = df[df['物理']==1]df1 = df[df['化學']==1]C.df1 = df[df['化學']==1]df1 = dfl[df1['物理']==1]D.df1 = df[df['化學']==1]df1 = df[df['物理']==1]②在程序劃線處填入合適的代碼。(3)用字典ans創建并轉置的DataFrame對象如圖c所示,繪制柱形圖如圖d所示。實現該功能的Python程序如下:import matplotlib.pyplot as pltadf = pd.DataFrame(ans,index= ['人數']).Tplt.bar(______)#設置繪圖參數,代碼略plt.show()程序的劃線處應填入的正確代碼為________(單選,填字母)。A.adf.人數,adf.班級B.adf.班級,adf.人數C.adf.人數,adf.indexD.adf.index,adf.人數答案 (1)①C ②i+1 (2)①AC ②len(df1)或 len(df1.index) (3)D解析 (1)①函數check檢查選考科目數是否有誤,變量i表示學生所在行索引,j表示列的名稱,因此用變量dfs.at[i,j]表示某個單元格的名稱。②函數返回錯誤數據行對應的學生序號,序號為行索引i加1。(2)①先篩選出選物理的學生記錄,保存在對象df1中,再在df1中篩選出選化學的學生;或者先篩選出選化學的學生記錄,再篩選出選物理的學生記錄。②統計每個班級同時選報“物理”和“化學”學科的人數,而該人數就是對象df1的記錄的數量len(df1)。(3)利用字典ans創建對象adf,字典的鍵為各個列標題的名稱,值為每一行的記錄值,該對象只有一行記錄,且設置index為人數。轉置是對行列發生變換,一共有10行,對應的屬性是index,只有一列,列的標題是人數。2.學校暑期開展“青春迎亞運”活動,邀請高二學生每日參加運動鍛煉并進行線上打卡。每周收集一次相關數據,分別保存在相應的xlsx文件中,部分文件如圖a所示;每個文件記錄了一周7天的打卡數據,示例如圖b所示,其中運動時長單位:分鐘。圖a圖b為統計分析學生鍛煉情況,給出周報數據,編寫Python程序,請回答以下問題:(1)定義px函數,功能為:讀取某一周的打卡數據,將其按班級進行排序操作并返回結果。函數代碼如下,將劃線處代碼補充完整。import pandas as pddef px(file_week): df=pd.read_excel(file_week) df=df.sort_values(________,ignore_index=True) #按班級升序排序,參數ignore_index=True 表示更新索引 return df(2)統計某一周各運動項目的參與人次,并繪制柱形圖,部分Python代碼如下:import matplotlib. pyplot as plts=input(″請輸入文件名:″)df=px(s)df1=df.groupby(″運動項目″,as_index=False).①________ #統計各運動項目參與人次df1.rename(columns={″學號″:″參與人次″},inplace=True) #更改列標題plt.bar(②________)plt.xlabel(″運動項目″)plt.ylabel(″參與人次″)plt.show()劃線處應填入的代碼為________(單選,填字母)。A.①count() ②df1[″參與人次″],df1[″運動項目″]B.①sum() ②df1[″參與人次″],df1[″運動項目″]C.①sum() ②df1.運動項目,df1.參與人次D.①count() ②df1.運動項目,df1.參與人次(3)統計某一周每班各學生的總運動時長后,比較得出該周每班最高的前兩位時長,部分Python程序代碼如下,請在劃線處填入合適的代碼。qp=[[0 for i in range(m)]for j in range(n)]'''定義數組qp記錄每班各學生一周運動總時長,n為班級數,m為每班人數。其中qp[0][0]~qp[0][m-1]存儲1班1號~m號同學的每周運動總時長,以此類推,qp[n-1][0]~qp[n-1][m-1]存儲n班1號~m號同學的每周運動總時長。'''print(″本周每班最高的前兩位時長分別為:″)i=0while i num=df[″學號″][i] cla=df[″班級″][i] ①________ if i!=0 and df[″班級″][i]!=df[″班級″][i-1] or②________: cla=df[″班級″][i-1] k1=0;k2=0 for j in range(1,len(qp[cla-1])): if qp[cla-1][j]>qp[cla-1][k1]: ③________ k1=j elif qp[cla-1][j]>qp[cla-1][k2]: k2=j print(cla,″班″,qp[cla -1][k1],qp[cla -1][k2]) i=i+1(4)統計某一周各運動項目的參與人次后繪制柱形圖如圖c所示,由圖可知,該周參與人氣最高的運動項目為______________。圖c答案 (1)'班級' (2)D (3)①qp[cla-1][num-1]+=df['運動時長'][i] ②i==len(df)-1 ③k2=k1 (4)跑步解析 (1)題目要求按班級進行排序。(2)統計各運動項目參與人次用count函數。圖表的x和y軸分別為運動項目和參與人次。(3)①從df中獲取每位同學的數據。while循環遍歷df中的每一位同學,num和cla對應該同學的班級和學號,則可對qp進行賦值,獲取每位同學的運動時長。②最后一個班級的情況。條件i!=0 and df[″班級″][i]!=df[″班級″][i-1],表示找出兩個不同的班級。若最后幾位學生都在同一個班級,顯示不滿足條件df[″班級″][i]!=df[″班級″][i-1],那么最后一個班級的情況也要做出處理。③for循環對當前班級的學生進行遍歷,選取最大的前兩位時長,第一個判斷語句qp[cla-1][j]>qp[cla-1][k1]時,則表示j學生的時長比之前的最大值大,則j同學變為新的最大值時長,k1同學變為新的第二大的時長。(4)略。3.為統計分析不同年級學生名字中的常用字,小王同學收集了本校所有學生的名字,并以入學年份為文件名分別保存在Excel文件中,文件如圖a所示,每個文件包含了學生的年級、姓名和性別信息,如圖b所示。編寫Python程序。請回答下列問題:(1)定義getname函數,功能為:讀取某年級的Excel文件,找出文件中同性別的學生,將學生姓名中的每個字(不包含姓氏,沒有復姓學生)提取出來存儲在列表mz中并返回列表。函數代碼如下,請在劃線處填寫合適的代碼。def getname(nj, xb): mz=[] df=pd.read_excel(nj+″學生名單.xlsx″) for i in df.index: xm=df.at[i,″姓名″] if ①________: for m in xm[1:]: mz.append(m) return ②________(2)小王想統計女生名字中出現最頻繁的10個字,部分Python程序如下,請在劃線處選擇合適的代碼。import pandas as pdxb=input(″請輸入性別:″) #輸入性別″女″nianji=[″2020級″,″2021級″,″2022級″]mzs=[] #存儲姓名中的字for nj in nianji: mzs=mzs+getname(nj,xb)data={'字':mzs,'個數':[1]*len(mzs)}df1=pd.DataFrame(data)df2=df1.groupby(″字″,as_index=False).count() #統計每個字出現的次數df3=__________劃線處應選擇的代碼是________(單選,填字母)。A.df2.sort_values(″個數″,ascending=True)[:10]B.df2.sort_values(″字″,ascending=False).tail(10)C.df2.sort_values(″字″,ascending=True).tail(10)D.df2.sort_values(″個數″,ascending=False).head(10)(3)將統計結果(10個最頻繁的字)繪制成柱形圖,部分Python程序如下,請在劃線處填寫合適的代碼。import matplotlib.pyplot as pltplt.title(xb +″生取名常用字″)plt.bar(df3.字,__________)plt.show()答案 (1)① df.at[i,″性別″]==xb 或 df[″性別″][i]==xb 或 df性別[i]==xb ②mz (2)D (3)df3.個數 或 df3[″個數″]解析 (1)①遍歷學生名單每一行,取出當前行學生姓名,找出當前行中性別df.at[i,″性別″]等于性別xb的學生記錄。②將符合條件學生名字中每個文字存儲到列表mz,并返回列表。(2)利用字典data創建一個df1對象,該對象有“字”和“個數”兩列,“字”列是提取的每個姓名中的字符,對應的數量均為1,按“字”分組并統計出現的次數,因此需按″個數″進行降序排列,并取出最大(最前面)的10條記錄。(3)圖表中橫軸為出現的最常見的10個字,縱軸為每個字對應出現的次數。4.小明利用“在線社團報名系統”收集了全校學生的社團報名信息,并將報名數據導出到“社團報名.xlsx”中,如圖a所示。然后編寫Python程序對報名數據進行處理,生成分別以班級名和社團名為文件名的Excel文件,以便分發給相應的社團指導老師和班主任。圖a圖b(1)在對表格進行數據整理時發現,關于“Jacky.Y”同學的記錄可能存在的數據問題是________(選填:A.數據缺失 B.數據異常 C.邏輯錯誤 D.數據格式不一致)。(2)其中生成每個社團名單文件的過程是:先對報名數據按社團名稱進行分類,并對選報同一社團的學生按班級進行升序排序,然后生成各個社團名單文件,如圖b所示。對應的程序代碼如下,請在劃線處填寫合適的代碼。import pandas as pddef read_file(filename): #讀入報名數據的原始文件,并將表中的數據轉換成列表,代碼略def save_file(a): #保存名單到相應社團的Excel電子表格文件 df = pd.(共171張PPT)第二部分 算法與程序設計專題9 pandas數據統計1.對DataFrame對象按列進行公式計算,描述DataFrame對象數據以字典中鍵為列的存儲形式;2.對每個鍵對應一列數據多個值進行切片,掌握取出不同數據區域內容的方法;3.運用函數統計對象的平均值等操作,運用排序函數對數據進行有序排列;4.運用groupby函數對數據進行分組的方法,并在分組的基礎上進行數據統計.目 錄CONTENTS體系構建01真題再現02考點精練03當堂檢測04課后練習05體系構建1Pandas有Series和DataFrame兩種對象,這兩種對象均有index和values屬性,Series對象的values是一維的,DataFrame的values是二維的,因此DataFrame對象比Series對象多一個columns屬性,可以理解為index表示行號,columns表示列名。pandas處理的對象主要是DataFrame,取出DataFrame中的一列,降維為Series對象,可以用list函數轉換為列表,對某列的值進行切片,可以轉換為一個數值。可以對記錄選取、篩選和分組操作,靈活地區分不同類型的數據,可以對記錄進行排序操作,實現數據的有序顯示。可以對各條記錄的字段進行遍歷,統計符合要求字段值的數量、總和、平均值以及最值。真題再現2(2024年1月浙江省選考)某學院舉行運動會,比賽設跳高、100米等項目,每個項目分男子組和女子組。現要進行報名數據處理和比賽成績分析。請回答下列問題:(1)運動會報名規則為:對于每個項目的男子組和女子組,每個專業最多各報5人(如“軟件工程”專業在男子跳高項目中最多報5人)。軟件工程專業的報名數據保存在DataFrame對象df中,如圖a所示。若要編寫Python程序檢查該專業男子跳高項目報名是否符合規則,下列方法中,正確的是________(單選,填字母)。A.從df中篩選出性別為“男”的數據dfs,再從dfs中篩選出項目為“跳高”的數據,判斷篩選出的數據行是否超過5行B.對df中數據按性別排序并保存到dfs中,再從dfs中篩選出項目為“跳高”的數據,判斷篩選出的數據行是否超過5行C.從df中篩選出項目為“跳高”的數據dfs,判斷dfs中是否有連續5行以上的男生數據(2)運動員比賽成績的部分數據如圖b所示。根據已有名次計算得,第1名至8名分別計9,7,6,5,4,3,2,1分,第8名之后計0分。實現上述功能的部分Python程序如下,請在程序中劃線處填入合適的代碼。import pandas as pdimport matplotlib.pyplot as plt#讀取如圖b所示數據,保存到 DataFrame 對象 df1 中,代碼略f = [9, 7, 6, 5, 4, 3, 2, 1]for i in range(0,len(df1)): rank = df1.at[i,″名次″] #通過行、列標簽取單個值 score = 0 if rank <= 8: ______________df1.at[i,″得分″] = score(3)根據上述 df1 中的得分數據,統計各專業總分,繪制如圖 c 所示的柱形圖,實現該功能的部分Python程序如下:②程序的方框中應填入的正確代碼為________(單選,填字母)A.x=df1[″專業″]y=df1[″總分″]B.x=df2[″專業″]y=df2[″得分″]C.df1[″專業″]=″專業″df1[″總分″]=″總分″D.df2[″專業″]=″專業″df2[″得分″]=″得分″答案 (1)A (2)score=f[rank-1]或score=f[int(rank)-1] (3)①專業 ②B解析 本題考查利用Pandas模塊進行數據處理。(1)A選項分二次篩選后,得到該專業男生參加跳高的人數,并檢查數據。(2)名次為1-8的可以在列表f中取出對應的得分,但列表的索引下標是從0開始的。(3)①從圖表中可以看出是按″專業″進行分組;②圖表橫軸為專業名稱,縱軸為各專業的得分情況。(1)運動會報名規則為:對于每個項目的男子組和女子組,每個專業最多各報5人(如“軟件工程”專業在男子跳高項目中最多報5人)。軟件工程專業的報名數據保存在DataFrame對象df中,如圖a所示。若要編寫Python程序檢查該專業男子跳高項目報名是否符合規則,下列方法中,正確的是________(單選,填字母)。A.從df中篩選出性別為“男”的數據dfs,再從dfs中篩選出項目為“跳高”的數據,判斷篩選出的數據行是否超過5行B.對df中數據按性別排序并保存到dfs中,再從dfs中篩選出項目為“跳高”的數據,判斷篩選出的數據行是否超過5行C.從df中篩選出項目為“跳高”的數據dfs,判斷dfs中是否有連續5行以上的男生數據考點精練3重難點1 利用Pandas批量處理文件Pandas主要功能是計算一個集合對象中某個字段的記錄數量、總和、平均值和最值(最大值或最小值)。這個集合可以是通過篩選找到符合處理條件的數據(子集),也可以是通過分組,將某列相同字段值的記錄組合在一起,形成一個個的分組,再分別統計各個分組的數量、和、平均值和最值。這些功能Excel軟件也可以實現,但若是數據分布在多個數據文件時,Excel軟件就要手工不斷地打開數據,重復進行統計,而Pandas可以通過算法,利用循環結構,將這些操作讓計算機自動完成。例題 小紅收集了部分城市2021年全年每天PM2.5、PM10、CO濃度數據,每天的數據分別保存在以8位日期字符串命名的CSV文件中,部分文件如圖a所示,每個文件記錄了一天24小時的監測數據,示例如圖b所示。為統計分析城市A全年各月份PM2.5的月平均濃度(當月的日平均濃度的平均值),編寫Python程序。請回答下列問題:(1)定義pmday函數,功能為:讀取某天的CSV文件,返回城市A當天PM2.5的日平均濃度。函數代碼如下,劃線處應填入的代碼為________(單選,填字母)。A.df['類型']=='PM2.5'B.df['類型'=='PM2.5']C.df[df['類型']]=='PM2.5'D.df[df['類型']=='PM2.5']import pandas as pddef pmday(dayfile): df = pd.read_csv(dayfile) #讀取文件dayfile中的數據 df =________ return df['城市A'].mean() #返回城市A當天PM2.5的日平均濃度(2)統計城市A各月份PM2.5的月平均濃度并繪制線形圖,部分Python程序如下,請在劃線處填寫合適的代碼。import matplotlib.pyplot as plt def tstr(t):if t<10: retrun '0'+str(t) else: retrun str(t)pm = [0] * 12mdays=[31,28,31,30,31,30,31,31,30,31,30,31] #2021年每月天數for m in range(12): sm = 0 mstr = tstr(m+1) for d in range(①________): dstr = tstr(d+1) dayfile = '2021' + mstr + dstr + '.csv' sd = pmday(dayfile) ②________ pm[m] = sm/mdays[m]x = [1,2,3,4,5,6,7,8,9,10,11,12]y=③________plt.plot(x,y) #繪制線性圖#設置繪圖參數,顯示如圖c所示線形圖,代碼略(3)城市A 2021年PM2.5年平均濃度為34.6微克/立方米。由圖c可知,城市A 2021年PM2.5月平均濃度超過年平均濃度的月份共________個。思維點撥明考向 本題考查利用Pandas進行數據統計精點撥 (1)可以通過布爾型數據選取滿足條件的行。(2)計算各月份PM2.5濃度的平均值,可以累加各月的每天PM2.5濃度的平均值。變量dayfile表示每天的數據文件名,題干已經提示“每天的數據分別保存在以8位日期字符串命名的CSV文件”,調用函數pmday(dayfile) ,可以得到當天PM2.5的日平均濃度,并保存于變量sd。當月的各天PM2.5的日平均濃度需要累加起來,最后求均值。③空橫坐標為月份,縱坐標為PM2.5月平均濃度,即列表pm的數據。(3)超過年平均濃度的月份為1、2、3、4、11月答案 (1)D (2)①mdays[m] ②sm += sd ③pm (3)5變式 學校食堂以服務質量進行了調查問卷,調查項目共 5 項(具體內容略)。12個班級的調查結果分別存儲在“dy01.csv”“dy02.csv”等文件中(如圖a所示),每個文件部分界面如圖b所示。現需要分析每個問題選“A”的情況,采用Python編制程序代碼,請回答下列問題。(3)根據上述統計的得分數據,統計每個問題選“A”的數量,繪制如圖 c 所示的柱形圖,請在劃線處填入合適代碼。圖cimport matplotlib.pyplot as pltplt.title(″每個問題選A的總人數″)plt.bar(①__________,②__________,label='A 選項')plt.legend()plt.show()解析 本題考查利用Pandas進行數據統計。(1)df.columns[1:]依次對應5個問題的名稱,對每個問題進行篩選,找出選A的記錄并統計數據,賦值給c,再將c添加到列表A_list中。(2) ①12個班級的班名存儲在字符串s中,每個班名占兩個數字,變量i表示每個班名的起始索引。②ans_list是一個二維數組,共12個元素,分別存儲每個班5個問題的選A的人數,現要統計每個問題選A的總和,因此變量i是ans_list數組的列索引,變量j是ans_list數組的行索引。(3)圖表的橫軸為問題的名稱x,縱軸為各個問題選A的總人數y。答案 (1)c=len(df[df[col]==″A″])(2)①s[i:i+2] ②s+=ans_list[j][i] (3)x,y重難點2 利用函數按列進行數據統計DataFrame是Pandas處理的主要對象,index屬性記錄了每行記錄所在的行索引,columns屬性記錄每列的名稱。df.列名就可以表示該列所有的數據的集合,可以運用函數計算一個集合對象的記錄數量、總和、平均值和最值(最大值或最小值)。通過篩選找到符合處理條件的數據(子集)集合,再對集合進行求和等計算。通過分組,將某列相同字段值的記錄組合在一起,形成一個個的分組,再分別統計各個分組的數量、和、平均值和最值。例題 小明通過調查問卷收集了食堂滿意度情況數據,保存在“data.csv”文件,如圖a所示。圖a圖b為統計分析每個調查項目不同選項的人數及不滿意率,編寫Python程序。請回答下列問題:(1)統計每一項調查內容的總票數、滿意、一般及不滿意人數,程序運行結果如圖b所示,import pandas as pdimport matplotlib.pyplot as plt #導入模塊df=pd.read_csv(″data.csv″,encoding=″utf-8″)#讀取csv文件中的數據cols=df.columns[1:]poll=len(df)data= {″調查項目″:[],″總票數″:[],″滿意″:[],″一般″:[],″不滿意″:[]}for colname in cols: dfc=df.groupby(①__________,as_index=False)[″序號″].count() data[″調查項目″].append(colname) data[″總票數″].append(poll) for j in dfc.index: name=dfc.at[j,colname] data[name].append(②__________)df2=pd.DataFrame(data) ; print(df2)(2)計算每個項目的“不滿意率”(=“不滿意”/“總票數”*100),并使用柱形圖分析每個項目的“不滿意率”情況,如圖c所示,請在劃線處填入合適的代碼。圖cdf2[″不滿意率(%)″]=①__________x=②__________y=df2[″不滿意率(%)″]plt.figure(figsize=(8,4))pl.title(″食堂調查問卷不滿意率(%)情況″)plt.bar(x,y,label=″不滿意率(%)″)plt.legend()思維點撥明考向 本題考查利用Pandas進行數據統計精點撥 (1)①一共有飯菜質量、飯菜價格等6個項目,每個項目都有滿意、一般和不滿意三個選項,因此需進行6次對不同項目進行分組統計,cols為項目名稱的集合,colname是每個項目的名稱,因此需按colname進行分組并統計各個選項的個數。以飯菜質量為例,得到的dfc對象如表所示。精點撥 ②dfc對象是每個項目colname的滿意、一般和不滿意3個項目的投票數,遍歷該對象,name是每個選項的名稱,因此需將每個選項的值添加到字典中去。(2)根據字典data創建了一個df2對象,①將在df2對象中新增"不滿意率(%)"列,其值計算方法為不滿意選項數除以總得票數,在圖表中可知,其值大于1,因此需乘以100。②創建圖表的x軸為各個調查項目答案 (1)①colname ②dfc.at[j,″序號″]或dfc[″序號″][j]或dfc.序號[j] (2)①df2[″不滿意″]/df2[″總票數″]*100或df2[″不滿意″]/po1l*100或df2.不滿意/df2.總票數*100或df2.不滿意/pol1*100或其他等價答案 ②df2[″調查項目″]或df2.調查項目變式 某學校開設選修課并在期末讓學生對其進行滿意度調查,選修課分藝術、體育、語言、計算機、職業技能等領域。現要進行報名數據處理和滿意度分析, 請回答下列問題:圖a圖b(1)選修課開設的條件為:報名人數大于20人。其中計算機類選修課的報名數據保存在DataFrame對象df中,如圖a所示。若要編寫Python程序檢查其中第1學期的“數字視音頻處理”選修課是否符合開設條件,下列方法中,________(單選,填字母)。A.對df中數據按開設學期排序并保存到dfs中,再從dfs篩選出選修課名稱為“數字視音頻處理”的數據,判斷篩選出的數據行是否超過20行B.從df中篩選出選修課名稱為“數字視音頻處理”的數據dfs,再對dfs按開設學期進行升序排序,判斷數據前21行的開設學期是否是第1學期C.從df中篩選出選修課名稱為“數字視音頻處理”的數據dfs,再按開設學期分組統計個數,判斷第1學期的個數是否超過20(2)計算機類選修課學生的滿意度調查部分數據如圖b所示。滿意度分3個等級:A.滿意、B.一般、C.不滿意,分別計1分、0分、-1分,基礎分為100分。實現計算各選修課的滿意度功能的部分Python程序如下,請在劃線處填入合適的代碼。import pandas as pdimport matplotlib.pyplot as plt#讀取如圖b所示數據,保存到DataFrame對象df1中,代碼略score=[1,0,-1]for i in range(0,len(df1)): rank=df1.at[i,″滿意度″] ①________ df1.at[i,″得分″]=marka=df1.groupby(″選修課名稱″,as_index=False)[″得分″].②________for i in range(0,len(a)): a.at[i,″得分″]+=100(3)根據滿意度進行降序排序,繪制如圖c所示的柱形圖,實現該功能的部分Python程序如下:圖ca=a.sort_values(″①__________″,ascending=False)#設置繪圖參數,代碼略x=②________y=a[″得分″]plt.bar(x,y) #繪制柱形圖答案 (1)A (2)①mark=score[ord(rank)-ord(″A″)]或 mark=score[ord(rank)-65] ②sum() (3)①得分 ②a[″選修課名稱″]或 a.選修課名稱解析 本題考查利用Pandas進行數據統計。(1)A選項篩選出的數據行包含其他學期的記錄。(2)①滿意度的等級依次為ABC,對應score中3個得分,需將ABC轉換成012的索引,并在score列表中取出相應的值。②求出每門選修課的得分之和,因此該處為求和函數。(3)①從圖上來看,是按得分降序排列。②圖表的橫軸為各門選修課的名稱,需要從排好序的a對象中取出選修課名稱列的內容。當堂檢測4重難點1 利用Pandas批量處理文件重難點2 利用函數按列進行數據統計1.高一年級(9個班級)進行“七選三”預選科。每個班一個Excel文件(如圖a所示)存儲預選科數據。數據表中“1”代表學生選擇該科目,空白代表學生未選擇該科目(某班部分選科數據如圖b所示)。請回答下列問題。圖a圖b(1)定義如下函數check(dfs)檢查選考科目數是否有誤,其中參數dfs為DataFrame對象,由如圖b所示Excel數據導入。返回值erlst為列表,列表元素數據類型為整型,表示錯誤數據行對應的學生序號(例如第6行學生“戴*躍”的序號為5)。def check(dfs): erlst = [] for i in range(len(dfs)):xk_sum = 0 for j in dfs.columns[2:]: dyg = ①________ if dyg == 1: xk_sum += dyg if xk_sum != 3: erlst.append(②________)return erlstA.df1 = df[df['物理']==1] df1 = df1[df1['化學']==1]B.df1 = df[df['物理']==1] df1 = df[df['化學']==1]C.df1 = df[df['化學']==1] df1 = dfl[df1['物理']==1]D.df1 = df[df['化學']==1] df1 = df[df['物理']==1]②在程序劃線處填入合適的代碼。(3)用字典ans創建并轉置的DataFrame對象如圖c所示,繪制柱形圖如圖d所示。實現該功能的Python程序如下:import matplotlib.pyplot as pltadf = pd.DataFrame(ans,index= ['人數']).Tplt.bar(______)#設置繪圖參數,代碼略plt.show()程序的劃線處應填入的正確代碼為________(單選,填字母)。A.adf.人數,adf.班級 B.adf.班級,adf.人數C.adf.人數,adf.index D.adf.index,adf.人數答案 (1)①C ②i+1 (2)①AC ②len(df1)或 len(df1.index) (3)D解析 (1)①函數check檢查選考科目數是否有誤,變量i表示學生所在行索引,j表示列的名稱,因此用變量dfs.at[i,j]表示某個單元格的名稱。②函數返回錯誤數據行對應的學生序號,序號為行索引i加1。(2)①先篩選出選物理的學生記錄,保存在對象df1中,再在df1中篩選出選化學的學生;或者先篩選出選化學的學生記錄,再篩選出選物理的學生記錄。②統計每個班級同時選報“物理”和“化學”學科的人數,而該人數就是對象df1的記錄的數量len(df1)。(3)利用字典ans創建對象adf,字典的鍵為各個列標題的名稱,值為每一行的記錄值,該對象只有一行記錄,且設置index為人數。轉置是對行列發生變換,一共有10行,對應的屬性是index,只有一列,列的標題是人數。2.學校暑期開展“青春迎亞運”活動,邀請高二學生每日參加運動鍛煉并進行線上打卡。每周收集一次相關數據,分別保存在相應的xlsx文件中,部分文件如圖a所示;每個文件記錄了一周7天的打卡數據,示例如圖b所示,其中運動時長單位:分鐘。圖b圖a(3)統計某一周每班各學生的總運動時長后,比較得出該周每班最高的前兩位時長,部分Python程序代碼如下,請在劃線處填入合適的代碼。qp=[[0 for i in range(m)]for j in range(n)]'''定義數組qp記錄每班各學生一周運動總時長,n為班級數,m為每班人數。其中qp[0][0]~qp[0][m-1]存儲1班1號~m號同學的每周運動總時長,以此類推,qp[n-1][0]~qp[n-1][m-1]存儲n班1號~m號同學的每周運動總時長。'''print(″本周每班最高的前兩位時長分別為:″)i=0while i(4)統計某一周各運動項目的參與人次后繪制柱形圖如圖c所示,由圖可知,該周參與人氣最高的運動項目為______________。圖c答案 (1)'班級' (2)D (3)①qp[cla-1][num-1]+=df['運動時長'][i] ②i==len(df)-1 ③k2=k1 (4)跑步解析 (1)題目要求按班級進行排序。(2)統計各運動項目參與人次用count函數。圖表的x和y軸分別為運動項目和參與人次。(3)①從df中獲取每位同學的數據。while循環遍歷df中的每一位同學,num和cla對應該同學的班級和學號,則可對qp進行賦值,獲取每位同學的運動時長。②最后一個班級的情況。條件i!=0 and df[″班級″][i]!=df[″班級″][i-1],表示找出兩個不同的班級。若最后幾位學生都在同一個班級,顯示不滿足條件df[″班級″][i]!=df[″班級″][i-1],那么最后一個班級的情況也要做出處理。③for循環對當前班級的學生進行遍歷,選取最大的前兩位時長,第一個判斷語句qp[cla-1][j]>qp[cla-1][k1]時,則表示j學生的時長比之前的最大值大,則j同學變為新的最大值時長,k1同學變為新的第二大的時長。(4)略。3.為統計分析不同年級學生名字中的常用字,小王同學收集了本校所有學生的名字,并以入學年份為文件名分別保存在Excel文件中,文件如圖a所示,每個文件包含了學生的年級、姓名和性別信息,如圖b所示。編寫Python程序。請回答下列問題:(2)小王想統計女生名字中出現最頻繁的10個字,部分Python程序如下,請在劃線處選擇合適的代碼。import pandas as pdxb=input(″請輸入性別:″) #輸入性別″女″nianji=[″2020級″,″2021級″,″2022級″]mzs=[] #存儲姓名中的字for nj in nianji: mzs=mzs+getname(nj,xb)data={'字':mzs,'個數':[1]*len(mzs)}df1=pd.DataFrame(data)df2=df1.groupby(″字″,as_index=False).count() #統計每個字出現的次數df3=__________劃線處應選擇的代碼是________(單選,填字母)。A.df2.sort_values(″個數″,ascending=True)[:10]B.df2.sort_values(″字″,ascending=False).tail(10)C.df2.sort_values(″字″,ascending=True).tail(10)D.df2.sort_values(″個數″,ascending=False).head(10)(3)將統計結果(10個最頻繁的字)繪制成柱形圖,部分Python程序如下,請在劃線處填寫合適的代碼。import matplotlib.pyplot as pltplt.title(xb +″生取名常用字″)plt.bar(df3.字,__________)plt.show()答案 (1)① df.at[i,″性別″]==xb 或 df[″性別″][i]==xb 或 df性別[i]==xb ②mz (2)D (3)df3.個數 或 df3[″個數″]解析 (1)①遍歷學生名單每一行,取出當前行學生姓名,找出當前行中性別df.at[i,″性別″]等于性別xb的學生記錄。②將符合條件學生名字中每個文字存儲到列表mz,并返回列表。(2)利用字典data創建一個df1對象,該對象有“字”和“個數”兩列,“字”列是提取的每個姓名中的字符,對應的數量均為1,按“字”分組并統計出現的次數,因此需按″個數″進行降序排列,并取出最大(最前面)的10條記錄。(3)圖表中橫軸為出現的最常見的10個字,縱軸為每個字對應出現的次數。4.小明利用“在線社團報名系統”收集了全校學生的社團報名信息,并將報名數據導出到“社團報名.xlsx”中,如圖a所示。然后編寫Python程序對報名數據進行處理,生成分別以班級名和社團名為文件名的Excel文件,以便分發給相應的社團指導老師和班主任。圖a圖b(1)在對表格進行數據整理時發現,關于“Jacky.Y”同學的記錄可能存在的數據問題是________(選填:A.數據缺失 B.數據異常 C.邏輯錯誤 D.數據格式不一致)。(2)其中生成每個社團名單文件的過程是:先對報名數據按社團名稱進行分類,并對選報同一社團的學生按班級進行升序排序,然后生成各個社團名單文件,如圖b所示。對應的程序代碼如下,請在劃線處填寫合適的代碼。import pandas as pddef read_file(filename): #讀入報名數據的原始文件,并將表中的數據轉換成列表,代碼略def save_file(a): #保存名單到相應社團的Excel電子表格文件答案 (1)B (2)①a[0][2] 或 df.at[0,“選報社團”] 或 df[“選報社團”][0] ②num=rs[i][1] ③imax = imin ④save_file(a[s:s+num])解析 本題主要考查Pandas數據處理。(1)邏輯錯誤一般指違背事物的業務邏輯,不符合預期的值,顯然不適用于本題中的數據情況。(2)①空根據形參a生成當前的文件名,文件名根據圖2可知是a所屬的社團名稱。②空實現分組雙向選擇排序,是對num的初始化。變量num用于表示當前組的總人數。③空imax=imin是在特殊情況下的imax重定向。由于imin與前端left元素交換時并未考慮imax的取值,當恰好imax==left時,最大值提前交換到了imin處,因此需要重定向。④空則是對排序好的當前組內數據提交保存為excel文件,調用save_file函數,當前組有效數據為a[s: s + num]。4.小明利用“在線社團報名系統”收集了全校學生的社團報名信息,并將報名數據導出到“社團報名.xlsx”中,如圖a所示。然后編寫Python程序對報名數據進行處理,生成分別以班級名和社團名為文件名的Excel文件,以便分發給相應的社團指導老師和班主任。1.某單位根據全省各縣市區的公共設施與服務運行情況,編制了“公共服務惠民指數”與“公共設施匹配指數”,現要對該兩項指數進行分析。請回答下列問題:圖a圖b(1)該單位希望在所有縣市區中,篩選出“公共服務惠民指數”低于75分的縣市區,提出預警。各縣市區的指數數據保存在DataFrame對象df中,如圖a所示。實現上述功能的部分Python程序如下:df1 = df[df[″公共服務惠民指數″] < 75]print(″需要被預警的縣市區個數為″,________,″個″)下列語句中,符合要求的為________。(單選,填字母)A.df1.count()B.len(df1)C.df1[″公共服務惠民指數″].sum()(2)根據圖a中數據中的區域代碼列的前4位,可以獲取到該區域所屬的地區,例如“3301”即代表“杭州市”。現需要根據該數據,匹配出各縣市區所屬的地區。實現上述功能的部分Python程序如下,請在程序中劃線處填入合適的代碼。import pandas as pdimport matplotlib.pyplot as pltarea = {″3301″:″杭州市″,″3302″:″寧波市″,......,″3311″:″麗水市″}df = pd.read_excel(″基層智治指數.xlsx″)df.insert(4,″地區″,″″) #在第4列插入“地區”列,值為空for i in df.index: areacode = str(df.at[i,″區域代碼″]) df.at[i,″地區″]=________________df = df.drop(″區域代碼″ ,axis= 1)②程序中的方框中應填入的正確代碼為________(單選,填字母)。A.″公共服務惠民指數″, ascending = TrueB.″公共服務惠民指數″, ascending = FalseC.dfg[″公共服務惠民指數″], ascending = TrueD.dfg[″公共服務惠民指數″], ascending = False答案 (1)B (2)area[areacode[0:4]] (3)①mean() ②B解析 (1)A選項count函數統計記錄的數量。B選項len(df1)是取得df1的行數。C選項對公共服務惠民指數這個列的數據求和。(2)根據第i行的區域代碼列字符串中的前4位,在字典area中獲取對應的地區名稱,賦給第i行的地區列。(3)①根據地區分組統計多個列的平均值。②根據圖中可知要對dfg的數據按公共服務惠民指數進行降序排序。2.某校高一學生的社團報名數據存儲在“stbm.xlsx”文件中,如圖a 所示。{'書畫社':52,'動漫社':97,'攝影社':35,'漢學社':38,'法學社':51,'詩詞社':37,'辯論社':43,'音樂社':63,'飛羽社':56,'魔方社':29}圖c(1)統計各社團報名人數,找出報名人數最多的三個社團(不存在并列名次情況)并創建如圖b所示的圖表。實現上述功能的 Python 程序如下,請在劃線處填入合適代碼。import pandas as pdimport matplotlib.pyplot as plt#設置中文字體,代碼略df=pd.read_excel(″stbm.xlsx″)df1=df.groupby(″①__________″,as_index=False).count()#刪除df1的“班級”列,并將列標題“姓名”重命名為“人數”,保存修改結果,代碼略df2=df1.sort_values(″人數″,ascending=False)df3=df2.②________plt.bar(df3.社團,③________)plt.title(″報名人數最多的前三個社團″)plt.show()#將各社團報名人數存入字典stdic并輸出,結果如圖c所示,代碼略(2)受場地限制,每個社團開展活動人數上限為45人。解決方案:超過45人的社團分成若干班級,每班人數按一定規則分配。編程解決社團分班問題,并輸出如圖d所示分班方案,請在劃線處填入合適代碼。{'書畫社':[26,26],'動漫社':[32,32,33],'攝影社':35,'漢學社':38,'法學社':[25,26],'詩詞社':37,'辯論社':43,'音樂社':[31,32],'飛羽社':[28,28],'魔方社':29}圖d(3)若“動漫社”實際報名人數為98人,則利用上述程序段進行分班后得到的結果為_______________________________________________________________(單選,填字母:A.'動漫社':[32,33,33]/B.'動漫社':[32,32,34])。答案 (1)①社團 ②head(3) ③df3.人數或 df3[″人數″] (2)x+stdic[i]%n或stdic[i]-(n-1)*x或stdic[i]-j*x或stdic[i]-sum(num) stdic[i]-len(num)*x或stdic[i]-(n-1)*num[0] (3)B解析 (1)統計各社團報名人數,需按社團進行分組統計。②找出報名人數最多的三個社團,用head函數獲取前三條記錄。③縱軸為排序后的社團人數。(2)當前社團人數stdic[i]大于45時,先確定班級數量n,再確定平均每班人數x,若是最后一個班級,則num中添加剩余人數stdic[i]-(n-1)*x。(3)報名人數為98人將分成3個班,根據x=stdic[i]∥n算計得到x的值為32,將剩余人數34添加到最后。3.小溫對 5 個景區進行網絡問卷調查,問卷中“環境”“硬件”“服務”和“交通”設置的選項及分值均一致,部分界面如圖a所示。導出數據的部分界面如圖b所示,其中數字對應問卷中每題的選項,如數字 i 代表該題的第 i個選項。請回答下列問題。(2)找出18~39 歲年齡段游客評分均值最高的景區,請在劃線處填入合適的代碼。jq=[″雁蕩山″,″楠溪江″,″漁寮″,″南麂列島″,″氡泉″]df1 = df[①________]df2 = df1.groupby(″景區″, as_ index=False)[″評分″].mean()df2 = df2.sort_values(″②________″, ascending=False)print(jq[df2[″景區″][0]-1])(3)根據上述 df2 中的評分數據, 繪制如圖 c 所示的垂直柱形圖, 代碼如下:A.x=jqy=df2[″評分″]B.x=df2[″景區″]y=df2[″均差″]C.x=jq1y=df2[″均差″]答案 (1)C (2)①df[″年齡″]==2或者df.年齡==2; ②評分 (3)C解析 (1)統計每份問卷對應景區的評分,數字i代表該題的第i個選項,即數字1代表第1個選項,計2.5分,數字2代表第2個選項,計2分,以此類推。(2)①找出18~39歲年齡段游客評分均值最高的景區,18~39歲是第2個選項。②找出18~39歲年齡段游客評分均值最高的景區,需對df2中的評分進行降序排序。(3)A選項垂直柱形圖橫坐標景區的順序和jq變量中景區的順序不同。B選項柱形圖橫坐標為各景區的名字,而df2中景區一列為數字。4.張三同學收集了一個地區 8 月各類共享單車的騎行數據記錄,每天的用戶數據存儲于“shared_bikes.xlsx”文件中,不考慮跨天數據。數據格式如圖a所示,請回答下列問題:(2)統計本月各類型單車的每天平均騎行時長,并繪制柱形圖,代碼如下,繪制的圖表如圖b所示,請在劃線處填入合適的代碼。圖b答案 (1)int(s[p+1:q]) * 60 (2)①df.index或range(len(df)) ②sm[j] += t ③avg (3)D解析 本題考查Pandas數據統計。(1)p記錄空格位置,q記錄冒號位置,而小時介于這兩者之間。取出小時后轉換為數字再乘以60。(2)①按行遍歷整個df對象,行的數量為0至len(df)-1,也可以在index屬性中取出。②變量j遍歷bike列表索引位置,找到相同類型就保存對應的sm列表元素中。③最后統計各種類型的平均值avg,因此y軸保存avg值。(3)騎行次數應對分組后數據進行計數。課后練習5重難點1 利用Pandas批量處理文件重難點2 利用函數按列進行數據統計1.管理員從該停車系統中導出了 3 月份每天的停車記錄,如圖a 所示,每天的停車記錄內容格式如圖b 所示(進出標記為 0 表示駛入,1 表示駛出,停車記錄已按進出時間升序排列)。圖a車牌 進出時間 進出標記川B·8CC88 2023-3-23-06:09:56 0川A·A98A8 2023-3-23-06:28:04 0川C·9VV99 2023-3-23-06:56:45 0川B·8UU88 2023-3-23-07:01:29 0川C·9VV99 2023-3-23-07:48:01 1圖b為統計停車場3月份每天的收入(只有駛入或駛出記錄的車輛不參與計費),編寫Python程序。(1)定義readdata函數,功能為:讀取某一車牌車輛當天的進出時間記錄,返回該車輛當天的停車總費用。參數 data 為該車牌當天的進出時間記錄。函數代碼如下,請回答下列問題:①程序段中加框處應填入的代碼為________(單選,填字母)。A.data.進出標記[p]==0B.data.進出標記[p-1]==0 and data.進出標記[p]==1C.data.進出標記[p+1]==1D.data.進出標記[p]==0 and data.進出標記[p+1]==1(2)統計停車場 3 月份每天的收入并繪制柱形圖,部分Python代碼如下,請在劃線處填入合適的代碼。(3)已知每月分為3個時間段,1-10日稱為上旬,11-20日稱為中旬,21-30(31)日稱為下旬。則由圖c可知,該停車場3月份________(選填:上旬/中旬/下旬)收入總和最高。答案 (1)①D ②p+=1或p=p+1(2)①dic[i]=0 ②df_g[k]>1 (3)下旬解析 (1)①遍歷數據data,進出標記為 0 表示駛入,1 表示駛出,先有駛入,再有駛出。②處理下一條記錄。(2)①語句dic[i]+=readdata(data)將計算每天的費用,因此需對dic[i]賦值為0。②df_g是按車牌進行分組記錄數量,只有一條駛入或駛出記錄的車輛不參與計費,即df_g[k]的值大于1。(3)略。2.小明為了研究某地近十年每月的溫差變化,編寫Python程序。以2023年4月為例,該月每天的溫度數據分別保存在以8位日期字符串命名的excel文件中,部分文件如圖a所示,每個文件記錄了一天24小時的溫度數據,如圖b記錄了4月28日的數據。圖a圖b(2)定義find函數,功能為:用字典創建DataFrame對象,并篩選出4月份溫差大于13的日期,輸出結果如圖c所示,請在劃線處填入代碼。 日期 溫差3 0404 13.19 0410 13.115 0416 13.317 0418 13.827 0428 15.5圖cdef find(r,t): dic={″日期″:r,″溫差″:t} df1=pd.DataFrame(dic) df2=______________ return df2(3)繪制4月份每天的溫差柱形圖,部分Python程序如下,請在劃線處填寫合適的代碼。答案 (1)C (2)df1[df1.溫差>13]或df1[df1[″溫差″]>13] (3)①i+1 ②dv(dayfile) ③td解析 (1)df[″溫度″].max()表示當天最高溫度,df[″溫度″].min()為最低溫度。(2)對溫差進行篩選。(3)①變量i的值為0至29,而日期為1號至30號。②調用dv函數求每天的溫差。③y軸為溫差td。3.小美收集了某電商平臺某年1-12月的“十大”空調品牌的銷售數據,每個月的數據保存在一個csv文件中,文件如圖b所示,分別記錄了對應月份的訂單數據。請回答下列問題:(1)定義get_sales函數,功能為:讀取某月的csv文件,返回某品牌當月的銷售額。函數代碼如下,劃線處應填入的代碼為:________(單選,填字母)。A.df[df['品牌'] == brand] B.df[df['品牌'] == month]C.df['品牌'] == brand D.df['品牌'] == monthimport pandas as pddef get_sales(brand, month): filename = str(month) + '.csv' df = pd.read_csv(filename) #讀取文件 df =________ sales = (df['數量'] * df['單價']).sum() #求出df中所有數量*單價的總和return sales(2)統計十大品牌全年銷售額,并找出銷售額最大的品牌,繪制該品牌的1-12月銷售額的線形圖,部分Python程序如下,請在劃線處填寫合適的代碼。import matplotlib.pyplot as pltbrand_dict={'格力':0,'美的':0,'海爾':0,'奧克斯':0,'海信':0,'三菱重工':0,'日立':0,'華菱':0,'TCL':0,'大金':0}x,y = [],[]plt.show() #生成線形圖如圖c所示圖c(3)由圖c可知,該空調銷售額增量最大的月份是________。答案 (1)①A (2)①get_sales(j,i) ②brandmax = i ③i (3)11解析 本題考查Pandas數據處理。(1)①get_sales函數讀取某月的csv文件,返回某品牌當月的銷售額,函數兩個參數:month為月份,brand應為品牌。(2)①brand_dict字典用于統計每種品牌的全年銷售額,外循環i遍歷月份,內循環j遍歷品牌名稱,此處可利用自定義函數來累加該品牌每月銷售額。②處求所有品牌全年銷售額的最大值max_sales和最大值的品牌名稱brandmax。(3)略。4. 一球迷收集了近3個賽季的CBA比賽數據,每個賽季的數據分別保存在獨立文件中,如圖a所示,文件中數據記錄格式如圖b所示,以球員“布萊克尼”的“二分”數據“7.9-16.3”為例,7.9表示二分球平均命中數量,16.3表示二分球平均投籃次數。圖c該球迷想根據歷史賽季數據預測各球隊下個賽季的首發陣容,編寫了如下Python程序,請回答下列問題:(1)定義readData函數,功能為:讀取某賽季的excel文件,返回每個隊員的得分(得分=二分球命中數量*2+三分球命中數量*3+罰球命中數量。函數代碼如下,劃線處應填入的代碼為________(單選,填字母)。A.df[″得分″][i]+=n*cols[col]B.df[″得分″][i]=n*cols[co1]C.df[″得分″]+=n*cols[col]D.df[″得分″]=df.二分*2+df.三分*3+df.罰球import pandas as pddef readData(file):答案 (1)A (2)①seasons[1:] ②df[df.球隊==team] ③n=teams[team](3) members[n*2], members[2*n+1]解析 本題考查Pandas數據處理和可視化。(1)遍歷每位隊員的二分、三分和罰球的平均命中數量,根據公式求隊員的3種投籃得分之和。col是字典中的鍵(二分、三分和罰球),cols[col]是投籃得分,df[col]表示二分等某列值數據,p是第i位球員命中數量和投籃次數分隔位置,因此n*cols[col]的乘積之和該球員總得分。(2)①seasons列表中存儲了3場比賽的文件名,將這3個文件合并為一個文件。語句df=readData(seasons[0]+″.x1sx″)已經讀取第1個文件,需對剩余的文件進行合并。②篩選各球隊得分最高的5名球員作為首發陣容。teams是字典變量,鍵是球隊名稱,對每個球隊進行遍歷,篩選出該隊全部隊員,找出在3場比較得分和最高5名球員。③取出球隊編號,將每個球隊的球員姓名和得分存儲到members對應的數組元素中。teams字典值為球隊的編號,members中元素個數為len(teams)*2,n號球隊各球員名字存入members[2*n]中,得分存入members[2*n+1]中。5.李老師收集了 2022 級學生“七選三” 選課意愿數據,每個班的數據分別保存以'xk'+班級為命名的 xlsx 文件中,如圖a所示,每個文件記錄了該班每位學生的選考科目選課情況,如圖b所示。(2)統計“技術”選課人數占總人數的比例,并作出各個科目選課人數的柱形圖。程序代碼如下,請在劃線處填入合適的代碼。圖c答案 (1)① i<10或者i<=9 ② data (i)(2)①km[j]+=1 ②km['技術']/len(df)③df_km['科目'] (3)物理、化學、地理(不分順序)解析 本題考查Pandas與Matplotlab模塊相關知識。(1)①空在班號前補0,當i值介于1-9之間時需要補0。②函數data功能代入班號,生成班級文件名,用pd_read將對應文件轉換為dataframe對象返回。(2)①遍歷學生所選學科,統計各科選課人數,以科目為鍵將結果存入字典km。②空統計技術選考人數占總人數的比例,而總人數可以通過len(df)得到。③觀察圖表x軸數據為科目。(3)略。6.某同學收集了部分城市2022年4月每天24小時空氣質量數據,按日分別保存在csv文件中,部分文件如圖a所示。數據格式如圖b所示。請回答下列問題:圖a圖b(1)定義函數 avg,功能是讀取某天的數據文件,計算該天空氣質量指數(AQI) 的平均值并返回,代碼如下。請在劃線①處應填入合適的代碼。def avg(filename): df=pd.read_csv(filename) df1=df[df.columns[2:]] #取類型及其后的所有列 g=df1.groupby(①________,as_index=False).mean() return ②________劃線②處應填入的代碼為________(單選,填字母)。A.df[df.類型=='AQI'] B.df1.AQI C.g.AQI D.g[g.類型=='AQI'](2)統計本月各城市空氣質量最長連續優、良的天數(按照環境空氣質量標準,空氣污染指數 AQI≤50為優級,AQI≤100 為良好),代碼如下,繪制的圖表如圖 c 所示。請在劃線處填入合適的代碼。圖cimport pandas as pdimport matplot1ib.pyplot as pltn=10 #城市個數count=[0]*ndaymax=[0]*nfor i in range(1, 31):答案 (1)①'類型' ② D (2)①count[j]+=1 ②daymax[k]=count [k] ③city解析 本題考查Pandas及數據處理相關知識。(1)函數要求計算該天空氣質量指數(AQI)的平均值,故應按“類型”分組并求平均,返回AQI的平均值,②中需篩選出類型是AQI的記錄。(2)①處統計連續優、良的天數,當dayaqi.at[0,t]<=100時,該城市計數器加1,填count[j]+=1。②處求count[k]的最大值,填daymax[k]=count[k]從題c的圖表可以看出,x軸數據為城市名稱,從city=dayaqi.columns[1:n+1]可以看出,city是城市名稱列表。1.某競賽獲獎名單已公布,現要對獲獎情況進行數據處理和分析。請回答下列問題:圖a 圖b (1)將獲獎名單讀取到DataFrame對象df中,如圖a所示,若要編寫Pandas程序分析出浙江省內獲得滿分400分的總人數。下列方法正確的是________(單選,填字母)。A.從df中篩選出省份為“浙江”的數據df1,再從df1中篩選出總分為“400”的數據df2,最后對df2中的“姓名”數據列使用count()函數統計出總人數B.對df中數據按“總分”降序排列并保存到df1中,再從df1中篩選出省份為“浙江”的數據df2,最后對df2中的“姓名”數據列使用sum()函數統計出總人數C.對df中數據按“總分”為關鍵字進行分組,并使用count()函數統計出總人數,得到數據df1,再從df1中篩選出省份為“浙江”的總人數(3)獲獎名單新增“獲獎等級”數據列,存儲在文件“data.xlsx”,如圖c所示,小陸想分析出一等獎獲獎人數最多的前5個省份(沒有并列情況),并繪制如圖d所示的柱形圖,實現該功能的部分Python程序如下。圖c圖dimport pandas as pdimport matplotlib.pyplot as pltplt.rcParams[″font.sans-serif″] =[″SimHei″] #設置圖表顯示中文字體df = pd.read_excel(″data.xlsx″)df1 =①________ #選取相應的一等獎數據df2 = df1.groupby(″省份″).count() #分組統計總人數df2.rename(columns = {″姓名″:″獲獎人數″}, inplace = True) #更改列標題名稱g = df2.sort_values(″獲獎人數″, ascending = False).head(5)plt.title(″一等獎獲獎人數最多的前 5 個省份″)plt.bar( ②________ ) #繪制柱形圖plt.ylabel(″獲獎人數″)plt.show()①請在程序中劃線處填入合適的代碼。②程序的劃線處中應填入的正確代碼為________(單選,填字母)。A.g.省份,g.獲獎人數 B.df2[″省份″],df2[″獲獎人數″]C.g.index,g.獲獎人數 D.df2.index,df2.獲獎人數答案 (1)A (2)①lst[i][2]>=h ②dic[city]=lst[i][1] (3)①df[df.獲獎等級==″一等獎″] 或 df[df[″獲獎等級″]==″一等獎″] ②C解析 (1)B選項姓名列是字符串類型,不能進行sum求和。C選項不能按總分進行分組。(2)①找出一等獎的條件是lst[i][2] >= h。②不在字典中,新建一個以city為名的新鍵值對。(3)略。2.為了督促學生寒假堅持體育鍛煉,老師采用線上打卡的方式收集學生鍛煉情況,數據如圖a所示。圖a圖b為統計冬鍛完成情況,編寫 Python 程序。請回答下列問題:(1)定義outdata函數,其中參數dftmp是DataFrame數據類型,數據由圖a所示的Excel表導入。函數功能是:統計每天每個學生的鍛煉項目個數,返回含有“學籍號”、“姓名”和“項目個數”信息的二維列表。函數代碼如下,劃線處應填入的代碼為________(多選,填字母)。A.dftmp.at[i,j]==″√″ B.dftmp[i][j]==″√″C.dftmp.at[j,i]==″√″ D.dftmp[j][i]==″√″def outdata(dftmp): a=[] for i in dftmp.index: #dftmp 的行索引(2)冬鍛打卡成功的標準為累計運動 15 天,每天鍛煉項目達到 3 項及以上。統計輸出寒假體育鍛煉達標的學生名單,并制作四個項目的運動次數對比圖,部分界面如圖b和圖c所示。部分Python程序如下,請在劃線處填寫合適的代碼。圖c答案 (1)AD (2)①days=1 ②i+=1③yd1[4:]或yd1.values[4:](3)not flag[i] and lst[i][2]>=3解析 (1)變量i為行索引,變量j為列標題,可以用字典法,也可以用at函數來表示某個單元格名單。(2)①對days初始化為1。②遍歷下一條記錄。③前4列依次為日期、學籍號、姓名和性別,從第列開始統計的是項目的次數。(3)每天鍛煉項目達到 3 項及以上,即第1次達到后就是達標,以后的表示已經達標,因此和flag[i]的狀態有關。3.小帥收集了2023年的銷售數據并存儲在″超市銷售數據.csv″文件中,部分數據如圖a所示。分析某月的銷售情況,柱形圖如圖b所示。部分Python程序如下:顧客編號,大類名稱,銷售日期,小類名稱,商品類型,單位,銷售數量,商品單位,銷售金額5,糧油,20230101,番茄醬,一般商品,瓶,1,6.7,6.710,日配,20230101,冷藏果粒酸乳,一般商品,盒,1,8.9,5.926,沖調,20230101,麥片/粉,一般商品,袋,1,27.7,27.731,洗化,20230101,洗衣皂,一般商品,塊,1,4.9,4.931,洗化,20230101,軟抽紙巾,一般商品,提,1,9.7,6.949,蔬果,20230101,花果,生鮮,千克,0.902,9.96,8.988,日配,20230101,利樂磚純奶,一般商品,提,1,65,4915,家居,膠棉拖把,一般商品,把,1,70,7050,休閑,20230101,軟糖,一般商品,袋,1,10.9,10.91,蔬果,20230101,芽菜,生鮮,千克,0.456,2.78,1.275,蔬果,20230101,鮮調味,生鮮,千克,0.24,9.6,2.32,洗化,20230101,無芯紙,一般商品,提,1,24.9,18.99,休閑,20230101,趣味/休閑,一般商品,盒,1,6.9,6.946,蔬果,20230101,蘋果類,生鮮,千克,1.776,4.98,8.84圖a圖b請回答下列問題:(1)為提取“銷售日期”中月份數據,劃線處應填入的代碼是________(單選,填字母)。A.df.index B.df.values C.df.columns(2)請在程序中劃線①②處填入合適的代碼。(3) 加框處實現按“銷售金額”降序排列后取前10項,下列代碼中能正確實現的有________(多選,填字母)。(注:全部選對的得2分,選對但不全的得1分,不選或有選錯的得0分)A.g.sort_values(″銷售金額″,ascending=False).tail(10)B.g.sort_values(″銷售金額″,ascending=False).head(10)C.g.sort_values(″銷售金額″,ascending=True)[:11]D.g.sort_values(″銷售金額″,ascending=False)[:10]答案 (1)A (2)①df.月份==month或df[″月份″]==month ②g.銷售金額或g[″銷售金額″] (3)BD解析 (1)表達式df.at[i,″銷售日期″]中,變量i表示記錄的行索引,因此需遍歷df的行索引集合。(2)①輸入需查詢的月份month,篩選月份數據的條件是月份列中值為month。②圖表的縱坐標為銷售金額。(3)按“銷售金額”降序排列后取前10項,可以采用head函數,也可以采用切片,但切片時得到的是前閉后開的區間。4.小陳在氣象部門得到了一份2022年不同城市的月平均日照時數(單位:kW·h/m2/day)數據,存放在Excel文件“日照.xlsx”中。部分界面如圖所示。圖a(2)第2步,僅考慮平均日照時數因素,選出最適合用光伏發電給智能農業大棚提供能源的十個城市。劃線處應填入的代碼為________(單選,填字母)。df=________A.df.sort_values(″城市名″,ascending=False).head(10)B.df.sort_values(″城市名″).tail(10)C.df.sort_values(″年度平均″,ascending=False)[:10]D.df.sort_values(″年度平均″,ascending=False).tail(10)#輸出結果如圖b所示,代碼略年度平均最高的10個城市為:日喀則地區 5.83阿里地區 5.66三沙市 5.57山南地區 5.53拉薩市 5.53那曲地區 5.11昌都地區 4.91海西蒙古族藏族自治州 4.88和田地區 4.84攀枝花市 4.83圖b(3)小陳想在家鄉溫州建一個智能大棚,采用光伏發電加蓄電設備供電,面積為1平方米的光伏板容量約為0.3 kW/塊,光伏的充放電效率為80%,大棚每天消耗的最低電能約為30 kW·h,為確保每月能正常供電,需要1平方米的光伏發電板共①________塊。(日均發電量=電池板的容量/塊×塊數×平均日照時數×充放電效率)建設光伏發電設備前要先獲得當地的平均日照時數情況,小陳通過如下代碼獲取相關數據。程序運行界面如圖c所示:圖cres=df[df[″城市名″]==″溫州市″]res=res.values[0][1:13].②________print(″溫州市月平均日照最小值為”,res)答案 (1)計算每個城市的年度平均日照時數 (2)C (3)①52 ②min()解析 本題考查Pandas相關操作及其應用。(1)mdays列表中存放每個月的天數,Excel表格中存放的是每個月的月平均日照時數,通過for循環將月平均日照時數*每個月的天數并進行累加,得到全年的日照時數,再計算出當前城市的日平均日照時數,并通過round函數保留2位小數。故該程序功能為計算每個城市的年度平均日照時數。(2)最適合用光伏發電的十個城市即日照時數最長的十個城市,通過sort_vlaues進行降序排序,取前十個。(3)根據圖c可知溫州市月平均日照最小值為2.42,再根據公式:日均發電量=電池板的容量/塊×塊數×平均日照時數×充放電效率。0.3 kW/塊*塊數*2.42*0.8=30 kW,得到需要的光伏發電板共52塊。②處使用min()函數求最小值。5.小周要統計高二年級各班的行為規范得分情況,部分扣分數據如圖a所示。圖a(1)觀察數據,發現存在重復扣分的記錄,如圖a第2、3行所示。現需對數據進行整理,以下操作合理的是____(單選,填字母)。A.對班級、記錄員均相同的記錄去重B.對日期、關聯學生、項目名稱均相同的記錄去重C.對關聯學生、項目名稱、項目扣分均相同的記錄去重(3)該校高二年級共有16個班級,統計各班的行為規范得分(班級行為規范得分=100分-本班所有學生扣分),并繪制如圖b所示的柱形圖,實現該功能的部分Python程序如下,請在劃線處填入合適的代碼。圖b答案 (1)B (2)①df[″關聯學生″][i]或df.關聯學生[i]或df.at[i,″關聯學生″] ②t=j+1 (3)①班級 ②cla解析 (1)日期、關聯學生、項目名稱都相同,那么這兩條記錄是重復。(2)①索引為i的“關聯學生”列的名稱為df[″關聯學生″][i]。②從表達式s[t:j]來看,變量t的表示一位學生的開始索引位置,若當前位置的值為引號,則下一位學生的索引位置從j+1開始。(3)①計算每個班級的得分,因此須按班級進行分組統計。②列表cla中存儲每個班級的得分。6.某中學“7選3”選考科目的選科數據存儲在Excel文件“選科數據.xlsx”中,部分數據及格式如圖a所示。圖中“1”表示選擇該科目為選考科目。現對數據進行統計分析,編寫Python程序,請回答下列問題。圖a(2)統計7選3各科的選報人數,輸出各科的選報情況及開班情況,如圖b所示。部分程序代碼如下,請在劃線處填入合適的代碼。物理 人數:398 班級數:10化學 人數:408 班級數:11生物 人數:133 班級數:4政治 人數:261 班級數:7歷史 人數:244 班級數:7地理 人數:361 班級數:10技術 人數:136 班級數:4圖bimport pandas as pddf=pd.read_excel(″選科數據.xlsx″)km=[″物理″,″化學″,″生物″,″政治″,″歷史″,″地理″,″技術″]m=40 #每個班的最多人數,班額bj=[0]*7xkrs=[0]*7 #存儲選考科目的選報人數p=0for j in km: ①________ for i in range(len(df)): if df.at[i,j]==1: cnt+=1 ②________ bj[p]=fenban(cnt,m)p=p+1for i in range(7): print(km[i],″人數:″,xkrs[i],″班級數:″,bj[i])(3)繪制選考科目選科人數情況的柱形圖,部分Python程序如下,請在劃線處填寫合適的代碼。import matplotlib.pyplot as pltx=kmy=__________________plt.bar(x,y)#繪制柱形圖#設置繪圖參數,顯示如圖c所示柱形圖,代碼略圖c(4)下列程序能實現按班級統計各班選報技術學科人數的是________(單選,填字母)。A.jsrs_bj=df.groupby(″班級″).″技術″.count()B.jsrs_bj=df.sort_values(″班級″).count()C.jsrs_bj=df.groupby(″班級″)[″技術″].count()D.jsrs_bj=df.groupby(″班級″).技術.mean()答案 (1)allrs%maxbrs!=0或allrs%maxbrs>0或bjnum*maxbrs解析 (1)當選報總人數allrs是每班最多人數maxbrs的倍數時,開設的班級數為bjnum,否則需要再增加一個班級 。(2)對變量cnt賦初值0。②統計當前學科的選報人數,因此代碼為 xkrs[p],也可以寫為xkrs[km.index(j)]。(3)圖表的縱坐標數據為各科的選科人數xkrs。(4)略。7.第19屆杭州亞運會已完美落幕,亞運會賽事以“杭州為主,全省共享”的原則分布在杭州、寧波、溫州、湖州、紹興、金華各地。大會共有40個大項,61個分項,最終誕生了481塊金牌。小李作為一名體育愛好者想重溫大會賽程安排,他從杭州亞運會的官網上采集了相關數據,整理后存儲在“杭州第19屆亞運會總賽程.xlsx”文件中。如圖a所示(0表示有賽事但不產生金牌,其他數字表示當天產生的金牌數)。圖a為了更清楚地了解相關賽事信息,小李編寫了Python程序,請回答以下問題。(1)足球是小李最關注的大項,為了解足球的賽程安排,劃線處應填入的代碼為________(單選,填字母)A.df.大項==″足球″ B.df[″大項″==″足球″]C.df[df.大項==″足球″] D.df[df[″大項″]==足球]import pandas as pddf=pd.read_excel(″杭州第 19 屆亞運會總賽程.xlsx″)df2=________print(df2)(2)足球項目的比賽分布在杭州等城市的八個場館,了解各個場館舉辦足球賽事的具體場次,找到連續舉辦足球賽事最多的場館,如圖b所示。程序代碼如下,請在劃線處填入合適的代碼。黃龍體育中心體育場 [9/19, 9/21, 9/24, 9/27, 9/28, 10/1, 10/4, 10/6, 10/7]臨平體育中心體育場 [9/19, 9/21, 9/22, 9/24, 9/25, 9/28, 9/30, 10/3]上城體育中心體育場 [9/20, 9/22, 9/24, 9/25, 9/27, 9/28, 10/1, 10/3, 10/7]蕭山體育中心體育場 [9/19, 9/20, 9/21, 9/22, 9/24, 9/25, 9/27, 9/28, 10/1, 10/4]金華體育中心體育場 [9/19, 9/21, 9/24, 9/27]浙江師范大學東體育場 [9/19, 9/21, 9/24, 9/27]溫州奧體中心體育場 [9/21, 9/22, 9/24, 9/25, 9/27, 9/28, 9/30]溫州體育中心體育場 [9/22, 9/24, 9/25, 9/27, 9/28, 9/30]連續舉辦足球賽事最多的場館:蕭山體育中心體育場圖b(3)足球在亞運會期間總共產生兩枚金牌,統計分析其他大項產生的金牌總數,找出產生金牌總數最多的十個大項,并繪制圖形如圖c所示。程序代碼如下,請在劃線處填入合適的代碼。圖cimport matplotlib.pyplot as pltplt.rcParams['font.sans-serif']=['simhei'] #圖表中文標簽顯示為黑體grp=df.groupby(①________ , as_index=False).金牌總數.sum()grp=grp.sort_values(″金牌總數″,ascending=False).②________x=grp.大項y=grp.金牌總數#設置圖表參數,代碼略。答案 (1)C (2)①dic[sta].append(j)或 dic[sta]+=[j] ②c=0 ③maxsta(3)①″大項″ ②head(10)解析 (1)了解足球的賽程安排需符合″大項″列中值為″足球″的記錄。(2)①遍歷每行的第3列到倒數第4列,若這些單元格中值為0或1,表示該天舉辦足球賽事,將當天日期j添加到字典dic以場館名稱sta為鍵的值中。②統計連續舉辦足球賽事最多的場館,若當天沒有賽事,則將連續天數s的值置為0。③連續舉辦足球賽事最多的場館名稱保存在變量maxstak。(3)①統計分析其他大項產生的金牌總數,需按大項進行分類統計。②grp對象的sort_values方法是按金牌進行降序排列,找出產生金牌總數最多的十個大項,因此需用head函數。 展開更多...... 收起↑ 資源列表 專題9 pandas數據統計 學案(含解析).docx 專題9 pandas數據統計.pptx 縮略圖、資源來源于二一教育資源庫