中文字幕精品无码一区二区,成全视频在线播放观看方法,大伊人青草狠狠久久,亚洲一区影音先锋色资源

第四章 課時3 利用Pandas模塊處理數據 教案 浙教版(2019)必修1(課件 學案 教案三份打包)

資源下載
  1. 二一教育資源

第四章 課時3 利用Pandas模塊處理數據 教案 浙教版(2019)必修1(課件 學案 教案三份打包)

資源簡介

課時3 利用Pandas模塊處理數據
課時目標
1.掌握Pandas模塊的兩種數據結構Series和DataFrame。2.學習使用Pandas模塊對數據進行編輯、計算、統計、分析。3.會使用Python進行簡單數據處理,并能從其中提取有用信息形成結論。
1.常用的Python擴展模塊有Numpy、Scipy、Pandas和Matplotlib等,Pandas模塊主要用于數據的處理和分析。
2.Python中引入Pandas模塊的方法:import pandas as pd,pd是用戶為導入模塊取的別名。
3.pandas提供了Series和DataFrame兩種數據結構。
(1)Series(系列)
①Series是一種一維的數據結構,包含一個數組的數據和一個與數據關聯的索引(index),索引值默認是從0起遞增的整數,數據可以是不同類型的元素。列表、字典等可以用來創建Series數據結構。
②Series對象屬性
屬性 說明
index Series的下標索引,其值默認是從0起遞增的整數,也可以指定為字符串型
values 存放Series值的一個數組
(2)DataFrame(數據框)
①DataFrame是一種二維的數據結構,由1個索引列(index)和若干個數據列組成,每個數據列可以是不同的類型。DataFrame可以看作是共享同一個index的Series的集合。
創建DataFrame對象的方法很多,通常用一個相等長度的列表或字典來創建。
②DataFrame常用對象屬性
屬性 說明
index DataFrame的行索引
columns 存放各列的標題
values 存放二維數據的值
T 行列轉置
4.數據可視化是將數據以圖形圖像等形式表示,直接呈現數據中蘊含信息的處理過程。
5.matplotlib繪圖
(1)matplotlib是一個繪圖庫,使用其中的pyplot子庫提供的函數可以快速繪圖和設置圖表的坐標軸、坐標軸刻度、圖例等。
(2)引入matplotlib的pyplot子庫的方法為:import matplotlib.pyplot as plt。
6.可視化的作用
快捷觀察與追蹤數據、實時分析數據、增強數據的解釋力與吸引力等。
7.數據以可視化方式展現出來,用戶可以通過直觀、交互的方式瀏覽和觀察數據,發現數據中隱藏的特征、關系和模式。如“百度地圖”“百度指數”“航班飛行實時跟蹤地圖”等。
8.可視化的工具
(1)常見的數據分析中一般包含創建可視化圖表功能,主要用于數據可視化的工具有大數據魔鏡、Gephi、Tableanu等。
(2)使用Python、R等計算機語言編寫程序實現數據的可視化。
(3)可視化工具庫,如基于JavaScript的D3.js、Highcharts、GooleCharts等,基于Python的matplotlib等。
9.可視化的典型案例
數據以可視化方式展現出來,用戶可以通過直觀、交互的方式瀏覽和觀察數據,發現數據中隱藏的特征、關系和模式,如“風、氣象、海洋狀況的全球地圖”、“百度地圖”、“百度指數”、“編程語言之間的影響力關系圖”、“航班飛行實時跟蹤地圖”、“微博熱詞趨勢圖”等。
重難點剖析
1.Pandas模塊中的Series對象
(1)創建Series
import pandas as pd
s1=pd.Series([1,2,3,4])
s2=pd.Series([1,2,3,4],index=["a","b","c","d"])
(2)Series對象的檢索和修改
輸出索引值為0的值:print(s1[0])
輸出索引值為"b"的值:print(s2["b"])
輸出values小于3的值:print(s1[s1<3])
修改索引值為1的值為10:s1[1]=10
2.Pandas模塊中DataFrame對象
(1)創建DataFrame對象
①使用一個相等長度的列表或字典創建DataFrame對象。
如x=pd.DataFrame({"x1":[1,2,3,4],"x2":[5,6,7,8],"x3":[9,10,11,12]})
②導入二維數據文件創建DataFrame對象。
pd.read_excel(filename) #從Excel文件導入數據
pd.read_csv(filename) #從CSV文件導入數據
③DataFrame對象導出到二維數據文件
df.to_excel(filename) #導出數據到Excel文件
df.to_csv(filename) #導出數據到CSV文件
(2)查看DataFrame對象
通過index、columns、values屬性可以查看DataFrame對象的行索引、列索引及數據,如:df.index、df.columns、df.values。
查看數據列:通過字典記法或屬性檢索DataFrame對象中的一列數據,如:df['id']或df.id。
查看數據行:通過head()、tail()返回DataFrame的前n行、后n行數據;通過索引查看指定行,如:df[2:5],返回df對象中第2、3、4行數據;通過布爾型數據選取滿足條件的行。如:df[df["age"]>=18]。
使用at[]方法可以根據行標簽和列標簽選取單個值,如:df.at[0,"姓名"]。
(3)DataFrame對象中行、列的編輯
可以通過insert()、drop()、rename()、append()、set_value()等函數進行DataFrame對象中行、列的編輯。
(4)DataFrame對象中數據的統計與計算
可以使用count()、sum()、mean()、max()、min()、describe()、groupby()等函數對DataFrame對象中的數據進行統計與計算。
(5)DataFrame對象中數據的排序
按索引排序可以使用sort_index()函數;按值排序可以使用sort_values()函數。通過選項axis=0/1確定排序的軸向,axis默認值為0,縱向排序。
通過選項ascending=True/False確定升/降序,ascending默認值為True,升序排序;排序結果返回一個新DataFrame對象。
                
例1 小原爸爸負責接小原放學,一段時間內,他爸爸將每天接他時的堵車時間和天氣情況記錄在文件“data.xlsx”中,其中堵車時間的單位為分鐘,如圖 a 所示,并通過 Python 語言編程制作的圖表如圖 b 所示。
(1)通過對圖 b 的分析可知,天氣情況與堵車時間    (單選,填字母:A.有/B.沒有)一定的關系。
(2)部分程序代碼如下,請在劃線處填入合適的代碼。
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
#用來正常顯示中文標簽
df=pd.read_excel("data.xlsx") #讀取 Excel 文件中的數據
df=df.groupby("天氣情況", as_index = False). ①      #按“天氣情況”分組求平均數
df=df.sort_values(" ②    ",ascending= False)
x=③   
y=df["堵車時間"]
plt.title("不同天氣情況的平均堵車時間分析") #設置圖表標題
plt.bar(x, y) #繪制柱形圖
plt.show()
答案 (1)A (2)①mean() ②堵車時間
③df["天氣情況"]或df.天氣情況
解析 本題考查利用Pandas模塊統計數據和利用pyplot繪制圖像相關操作。(1)從題圖 b 可以看出,最堵的時間與天氣及雨勢大小相關。(2)①分組后用mean求平均數。②降序排序的參數為 ascending=False。從題圖b中可以得知為按堵車時間降序排列。(3)題圖 b的x 軸數據為“天氣情況” ,而 df 已按“天氣情況”進行了分組。
變式訓練1 某學校運動會高一年級各個選手得分情況存儲在“運動會得分.xlsx”數據文件中(如圖a所示),現準備利用Python程序對這些數據進行統計分析并可視化,請根據要求回答下列問題(注: 已對重名做技術處理)。
(1)文件“運動會得分.xlsx”中的數據是        (選填:結構化數據/半結構化數據/非結構化數據)。
(2)編寫如下Python程序,統計各班總分,并建立圖b所示圖表:
import pandas as pd
import matplotlib.pyplot as plt
df=pd.read_excel("運動會得分.xlsx")
#統計各班總得分情況,并建立圖表,如圖b所示
df1=df1.sort_values("班級",ascending=True)
#按班級升序排列
df1=df.groupby(①    ,as_index=False).②     #統計各班總得分
plt.title("高一年級各班總分匯總圖")  #添加圖表標題
plt.bar(df1["班級"],③     )
plt.show()
#輸出本年級最具價值運動員,最具價值運動員是本年級中得分最高的運動員,圖c所示
df3=df.groupby("姓名",as_index=False).得分.sum()
maxdf=df3.得分.max()
print("最具價值運動員:")
print(④     )
答案 (1)結構化數據 (2)①"班級" ②sum() ③df1["得分"]或df1.得分 ④df3[df3["得分"]==maxdf]或df3[df3["得分"]>=maxdf]
解析 本題考查利用Pandas模塊統計數據和利用pyplot繪制圖像相關操作。(1)Excel文件按行按列存儲數據,屬于結構化數據。(2)統計各班總得分,需按班級進行分組,并對每個班級得分進行求和操作。因此①為班級,②為sum()函數進行求和。③圖表縱軸為每個總分之和,因此③為df1對象中的得分列。④最具價值運動員可能有多名,因此應篩選出得分大于或等于最高分的記錄。
例2 2023 年女足世界杯小組賽晉級規則為:32 支參賽隊伍通過抽簽分為八個小組,每個小組分別有四支球隊進行比賽,勝平負分別積 3 分、1 分、0 分。每個小組積分的前兩名球隊晉級,積分相同的凈勝球多的球隊晉級,凈勝球相同的進球數多的球隊晉級。小組賽數據存放在“女足世界杯小組賽積分.xlsx”文件中,如圖 a 所示。
現用 Python 程序對表中數據進行處理,得到 16 支晉級球隊名單,并輸出如圖 b 所示的圖表。
(1)定義 tj 函數,功能為:使用 Pandas 讀取文件數據,計算每支球隊的積分,并返回一個 Dataframe 對象。實現相應功能的 Python 函數代碼如下,劃線處應填入的代碼為    。
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
#顯示中文
def tj(filename): #filename 為 excel 文件名稱
  df=pd.read_excel(filename)
  for i in df.index:
    df.at[i,"積分"]=   
  return df
(2)定義jsq函數,將Dataframe對象df中的“進失比”列(如數據"8比1",8為進球數,1為失球數,凈勝球數為7)求出各球隊的凈勝球、進球數。劃線處應填入的代碼為    。
def jsq(df):
  for i in df.index:
    a,b=map(int,df.at[i,"進失比"].split("比")) #8比1,則a=8,b=1
          
    df.at[i,"進球數"]=a
  return df 
(3)為了求出八個小組中晉級名單,按照小組A~H、積分由高到低的順序,繪制圖表如圖b所示。實現相應功能的代碼如下:
filename="女足世界杯小組賽積分.xlsx"
df=tj(filename)
df=①    
#以“小組”為主要關鍵字升序,“積分”“凈勝球”“進球數”為次要關鍵字降序排列
df=df.sort_values(["小組",'積分', "凈勝球" ,'進球'],ascending=[②     ,False,False,False]) #按小組分組并取出每組前 2 隊數據
df1=df.groupby(③    ,as_index=False).head(2)
plt.bar(④    ) #繪制如圖 b 所示圖表
plt.title('2023 女足世界杯 16 強球隊')
#設置圖表格式,代碼略
plt.show()
答案 (1)df.at[i,"勝"] * 3 + df.at[i,"平"]
(2)df.at[i,"凈勝球"] = a - b (3)①jsq(df) 
②True ③"小組" ④df1["球隊"],df1["積分"]
解析 本題考查利用Pandas進行數據統計的相關知識。(1)計算每支球隊的積分。勝平負分別積 3 分、1 分、0 分,因此每個單元格的計算公式為df.at[i,"勝"] * 3 + df.at[i,"平"]。(2)計算各球隊凈勝球,變量a表示進球數,變量b表示失球數,凈勝球的值為a-b數。(3)①調用jsq函數,計算df中的“進失比”列。②以“小組”為主要關鍵字升序,升序的ascending值為True。③繪制各個小組的積分情況,因此需按小組進行分組并取出每組前2 隊數據。④圖表橫軸為各小組前2名df1["球隊"],縱軸為各小組對應的積分df1["積分"]。
變式訓練2 張三同學收集了一個地區 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 所示,請在劃線處填入合適的代碼。
import pandas as pd
import matplotlib.pyplot as plt
df=pd.read_excel("shared_bikes.xlsx")
bike=[ "哈羅單車","摩拜單車","美團單車","青桔單車"]
sm=[0] * 4
avg=[0] * 4
days=31
for i in ①    :
  t=cal(df.at[i, "結束時間"]) - cal(df.at[i,
"開始時間"])
  for j in range(len(bike)):
    if df.at[i, "App 類型"]==bike[j]:
      ②   
      break
for i in range(len(bike)):
  avg[i]=sm[i]/days
plt.figure(figsize=(12,4))
x=bike
y=③    
plt.bar(x,y)
plt.show()
(3)統計本月各類型單車的騎行次數,下列加框處代碼有錯,可以改正為     (選填字母:(A.max()/B.min()/C.mean()/D.count())。
n=df.groupby("App 類型",as_index=True).用戶編號.sum()
答案 (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)騎行次數應對分組后數據進行計數。
例3 小紅收集了部分城市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 pd
def 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]*12
mdays=[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月平均濃度超過年平均濃度的月份共    個。
答案 (1)D (2)①mdays[m] ②sm += sd
③pm (3)5
解析 (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月。
變式訓練3 小林收集了各地市各年份檢測的 PM2.5 濃度值保存于 Excel 文件“PM2.5.xlsx”中,部分數據如圖 a 所示。小林使用Python 進行數據分析,請回答以下問題。
(1)小林先將同一個地區的數據輸出到各自獨立的 Excel 文件中,部分結果如圖 b 所示,實現程序如下所示:
import pandas as pd
import matplotlib.pyplot as plt
df=pd.read_excel("PM2.5.xlsx")
#cities 保存所有地區名稱,這里僅演示部分數據
cities=["安吉縣", "淳安縣", "慈溪市", "杭州市", "湖州市"]
for city in cities:
  dfc=   
  dfc.to_excel(city + ".xlsx", index=False) # 輸出文件結果示例如圖 b 所示
那么劃線部分語句可以是    (注:全部選對的得 2 分,選對但不全的得 1 分,不選或有選錯的得 0 分)
A.df[df["地區名稱"]==city]
B.df[df["地區名稱"]]==city
C.df[df.地區名稱==city]
D.df[df."地區名稱"]]==city
(2)對于圖 a 所示的原始數據,小林要進行數據整理:刪除“地區編碼”、“指標名稱”、“計量單位”等對后面統計無用的數據列,請將劃線處②的語句補充完整。
df=pd.read_excel("PM2.5.xlsx")
#刪除“地區編碼”、“指標名稱”、“計量單位”數據列
df=df.drop(["指標名稱", "地區編碼", "計量單位"], axis= ①   )  #同一個地市取 PM2.5 濃度最高的值
dfg =②   
#按 PM2.5 的值升序排序
dfg=dfg.sort_values("PM2.5", ascending=True)#輸出排序后的最后五行結果
print(dfg.tail())
(3)對于整理后的數據,在同一個地市中取歷次 PM2.5 濃度檢測值最高的值,最后按 PM2.5 升序排序數據,輸出結果如圖c 所示,則第②空應填寫的語句是    。(單選,填字母)
A.df.groupby("PM2.5").max()
B.df.groupby.地區名稱.max()
C.df.sort_values("PM2.5").max()
D.df.groupby("地區名稱").max()
(4)將排序后的數據分別取 PM2.5 檢測值最高和最低的五行數據合并成新的 DataFrame 對象后繪制成柱形圖如圖d 所示。請將程序補充完整。
df2=pd.concat([dfg.head(5), dfg.tail(5)]) #合并兩個對象成為新的DataFrame 對象
plt.rcParams['font.sans-serif']=['KaiTi','SimHei','FangSong'] #設置圖表字體
plt.figure(figsize=(8,4))
plt.title("部分縣市 PM2.5 濃度對比")
plt.xlabel("PM2.5 濃度值")
plt.bar(①     , df2["PM2.5"],color="orange")
for i in range(len(df2)):
  x=df2.index[i]
  y=②   
#text()方法可以繪制數據標簽,語法:text(橫坐標,縱坐標,顯示內容)
plt.text(x, y, '%d' % y)
答案 (1)AC (2)1 (3)D (4)df2.index
df2["PM2.5"][i]
解析 本題考查pandas數據處理相關知識。(1)將“地區名稱”符合條件的數據行篩選出來。(2)參數axis=1表示處理列,即刪除指定的列。(3)同一個地市中取PM2.5濃度值最高的數據行可以用分組函數groupby()和求最大值函數max()實現。A選項分組依據不對。B選項的函數格式不對。C選項是按PM2.5先升序排序,然后求所有數據中的最大值,此時PM2.5最大值只有一個數據,無法求出各個地市的最大值。(4)plt.bar()函數繪制柱形圖需要兩個參數:x軸數據和y軸數據(每個x對應的縱軸數據),由題中圖c和圖d可知,橫坐標是各個地區的名稱,而由于數據框df2是分組后的結果,地區名稱列已經成為了索引列。②空由程序和標簽的效果圖可知df2.index[i]取出了每行數據的橫坐標值,對應的縱坐標值是df2["PM2.5"][i]。
                
1.近期學校進行了一次技術學考模擬考試,教師將各班級的部分同學數據錄入了“考試成績.xlsx”文件中(如圖a 所示),為了根據學生成績評定等級,教師特地編寫了一個 Python 程序。
(1)觀察圖 a,下列關于“考試成績.xlsx”中數據存在的問題以及對應的解決方式中,正確的是    。(多選題,多選,錯選均不得分,漏選得 1 分)
A.數據重復應在進一步審核的基礎上進行合并或刪除等處理
B.數據缺失將上一條數據記錄中的數據復制
C.格式不統一進行數據轉換,形成統一格式
D.邏輯錯誤再次訪問數據源,驗證數據是否正確
(2)在解決數據問題后,進行進一步數據處理,要求如下:
a.按照等級評定規則,若學生成績大于等于 85 分,則等級為優秀,否則等級為
合格;
b.統計各班級的優秀人數,生成柱形圖(如圖 b 所示)。現編寫程序如下,請在劃線處填入合適的代碼:
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] 
#繪圖時正常顯示中文標簽
plt.rcParams['axes.unicode_minus']=False #繪圖時使用 Unicode 字符
df=pd.read_excel('考試成績.xlsx')
for i in range(len(df)):
  if ①    :
    df.at[i, "等級"]="優秀"
  else:
    df.at[i, "等級"]="合格"
df=②      #篩選出等級為優秀的學生
g=df.groupby("班級", as_index=True).count()
     
plt.title("各班級優秀人數")
plt.③     #顯示圖例
plt.show()
(3)若要生成如圖 b 所示的圖表,加框處的代碼應為下列選項中的    。(填字母)
A.plt.bar(x,y,label="優秀人數")
B.plt.bar(g.班級,g.等級,label="優秀人數")
C.plt.bar(g.index,g.等級,label="優秀人數")
D.plt.bar(df.index,df.等級,label="優秀人數")
答案 (1)AC (2)①df.at[i,"技術"]>=85 或者df["技術"][i]>=85 或者df.技術[i]>=85
②df[df.等級=="優秀"]或者 df[df["等級"]=="優秀"] ③legend( ) (3)C
2.為了完善某學校食堂管理、持續提高食堂服務質量,讓全校師生更加精神飽滿地開展工作、學習,對學校食堂進行了一些調查,調查項目共 5 項(具體內容略)。學校后勤管理謝老師收集了 12 個班級的調查結果,分別存儲在“dy01.csv”、“dy02.csv”、... 、“dy12.csv”等 12 個文件中(如圖 a 所示),每個文件部分界面如圖 b 所示。
現需要分析 12 個班級學生對這 5 個問題的選“A”情況。謝老師用 Python 的 pandas模塊編寫了以下代碼,實現相關問題的解決。請回答下列問題。
(1)定義了 fun_A()函數實現了統計某個班級 5 個問題的選“A”的人數情況。Python程序代碼如下,請在劃線處填入合適代碼。
import pandas as pd
def fun_A(file):
  df=pd.read_csv(file)
  A_list=[]
  for i in df.columns[1:]:
    j=c=0
    while j      if     :
        c+=1
        j+=1
    A_list.append(c)
  return A_list
(2)調用上述函數,處理 12 個班級每個問題的選“A”的總人數,Python 程序代碼如下,請在劃線處填入合適代碼。
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 #每個問題選 A 的人數
  for j in range(12):
    ②   
  y[i]=s
(3)經上述處理后,接著以圖的形式匯報結果(如圖 c 所示),Python 程序代碼如下,請回答下列問題。
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
#圖表顯示中文字體
plt.title("每個問題選 A 的總人數")
    
plt.legend()
plt.show()
劃線處代碼合適的是    。(單選,填字母)
A.plt.bar(x,y)
B.plt.bar(x,y,label='A 選項')
C.plt.plot(x,y)
D.plt.plot(x,y,label='A 選項')
(4)調查數據的有效問卷共 550 份,從圖 c 中可以觀察出有    (填數字)個問題的選“A”總人數低于 60%。
答案 (1)df.at[j,i]=="A"或df[i][j]=="A"
(2)①s[i:i+2] ②s+=ans_list[j][i]
(3)B (4)2
3.小王收集了 2022 年城市 A 全年每天的部分天氣數據,保存在“2022 天氣.xls”文件中,部分數據如圖a 所示。
(1)為統計 2022 年全年晴、陰、雨……的天數,編寫了如下的 Python 程序:
import pandas as pd
import matplotlib.pyplot as plt
df=pd.read_excel('2022 天氣.xls')
g=     
print('2022 年城市 A 天氣情況統計如下:')
for x in g.index:
  print(x+':' +str(g[x])+'天')
程序運行結果如圖 b 所示,則劃線處應該填入的代碼為    。(單選,填字母)
A.df.groupby('天氣情況')['日期'].sum()
B.df.groupby('天氣情況')['日期'].count()
C.df.groupby('天氣情況').mean()
D.df.groupby('天氣情況').count()
(2)統計 2022 年城市 A 每月平均氣溫并繪制線形圖,部分 Python 程序如下,請在劃線處填入合適的代碼。
s=[0]*12
avg=[0]*12 #存儲每月平均氣溫
mdays=[0]*12
x=[1,2,3,4,5,6,7,8,9,10,11,12]
df['平均溫度']=(df['最低溫度']+df['最高溫度'])/2
for i in range(365):
  ①   
  s[int(month)-1]+=df.at[i,'平均溫度']
  mdays[int(month)-1]+=1
for i in range(12):
  avg[i]=round(②    ,1)
y=③   
plt.plot(x,y) #繪制線形圖
#設置繪圖參數,顯示如圖c 所示線形圖,代碼略。
(3)由圖 c 可知,2022 年城市A 最冷和最熱的月份分別是    。
答案 (1)B (2)①month=df['日期'][i][5:7] 或 month=df.at[i,'日期'][5:7]或 month=df.日期[i][5:7] ②s[i]/mdays[i] ③avg (3)2、8
解析 (1)全年晴、陰、雨屬于天氣情況,因此先對天氣情況分組,表達式str(g[x])為Series對象的values值,因此按日期分組,且分組的索引就是分組的類別,再對其中一列進行計數。(2)①month是每條記錄的月份,df['日期'][i]表示第i天的日期。②avg統計每月的平均溫度,每月的溫度和累加到列表s中,mdays[i]表示某月的天數。③y軸為每個月的平均溫度avg。(3)略。
4.小明為了研究某地近十年每月的溫差變化,編寫Python程序。以2023年4月為例,該月每天的溫度數據分別保存在以8位日期字符串命名的excel文件中,部分文件如圖a所示,每個文件記錄了一天24小時的溫度數據,如圖b記錄了4月28日的數據。
(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所示,請在劃線處填入代碼。
def 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))
答案 (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。
5.某網站服務器五月(31 天)的后臺訪問記錄保存在 log.xlsx 文件中,如圖a所示:
請回答下列問題:
(1)定義 oneday 函數,功能為:讀取日期為 day 的訪問記錄,將訪問地區依次保存在列表 city 中,并返回該列表。函數代碼如下:
import pandas as pd
df=pd.read_excel('log.xlsx')
def oneday(day):
  city=[]
  for i in       :
    if df.at[i,"時間戳"][0:2] == day:
      city.append(df.at[i,"地區"])
  return city
劃線處代碼為:     (單選:A.df.index()/B.df.index/C.df.values()/ D.df.values)。
(2)統計該月每天華東五市的訪問數據,并繪制線型圖,部分 Python 程序如下,請在劃線處填寫合適的代碼。
import matplotlib.pyplot as plt
eastcity = ["上海","南京","杭州","蘇州","無錫"]
x=[i for i in range(1,32)]
y=[]
t=0
for i in range(1,32):
  ①   
  if i < 10:
    day="0" + day
  city=oneday(day)
  for j in city:
    if j in eastcity:
      ②   
    y.append(t)
    t=0
plt.plot(③    )
plt.show()
(3)由圖b可知,該網站本月訪問量低于 4 萬次天數共有     天。
答案 (1)B 或 df.index (2)①day=str(i) ②t+=1 或 t=t+1 ③x,y (3)5
6.某市中考體測規定,考生要在 6 個體育項目中選 3 個進行測試,少選或多選的同學不符合報名要求。全市 1 萬多名考生的報名結果(1 表示選擇該項目)保存在文件“tycs.csv”中,如圖 a 所示。請回答下列問題:
(1)下列有關數據處理的說法正確的是    。(多選,填字母)
A.在對數據進行處理前要進行數據整理,解決數據缺失、數據異常、邏輯錯誤等
問題
B.編程處理數據能提高數據分析和挖掘的效率,目前只能采用 Python 語言實現
C.文本數據處理一般過程包括分詞、特征提取、數據分析、結果呈現
D.需要將某個整體中各部分的大小和比例進行可視化展示時,可采用餅圖、環形圖等
E.可使用公式“=SUM(D5,I5)”對 Excel 中第 5 行D 列至I 列中的數據進行求和
(2)定義函數 filter_data 功能為:讀取某市報名的 csv 文件,返回該市所有報名符合要求(在6 個體育項目中選擇3 個)的學生信息。函數代碼如下,劃線處應填入的代碼為     。
import pandas as pd
def filter_data(datafile):
  df=pd.read_csv(datafile) #讀取文件 datafile 中的數據
  df['合計']=df.count(axis=1) - 3
# count 函數統計每行中非空數據的個數
  df1=         
  return df1
(3)統計該市每個組合報名的人數并繪制柱形圖,如圖b 所示,其中各體育項目名稱用相應字母(A~F)代替。部分 Python 程序如下,請在劃線處填寫合適的代碼。
import matplotlib.pyplot as plt
df=filter_data('tycs.csv')
d={'A': '800 米跑', 'B': '跳繩', 'C': '游泳', 'D': '引體向上', 'E': '擲實心球', 'F': '立定跳遠'}
result = {}
for i in df.index:
  ①   
  for key in d:
    t=df.at[i, d[key]]
    if t==1:
      choice += key
  if choice in result:
    ②   
  else:
    result[choice] = 1
x=result.keys() #獲取字典 result 的鍵
y=result.values() #獲取字典 result 的值
plt.bar(x, y) #繪制柱形圖
# 設置繪圖參數,顯示如圖 b 所示柱形型圖,代碼略
(4)由圖b 可知,報名人數最多的組合為    (填寫體育項目的名稱)。
答案 (1)ACD (2)df[df.合計 == 3] 
(3)①choice = "" ②result[choice] += 1
(4)800 米跑、跳繩、游泳
一、基礎鞏固
                
1.小明收集了某超市部分商品 2022 年上半年每天的價格數據并保存在"data.xlsx"文件中,如圖 a 所示。
要分析某商品一個月內的價格穩定情況,需要將本月每天(除第一天外)價格波動的絕對值加起來(價格波動=當天價格-前一天價格),其值越小,價格越穩定。
為統計該超市 6 月份各商品價格穩定情況,編寫如下 Python 程序。請回答下列問題:
(1)獲取 6 月份各商品的價格,劃線處填入的代碼為    。(多選,填字母)
A.df[df["日期"] >=20220601]
B.df["日期" >=20220601]
C.df[df.日期 >=20220601]
D.df[df["日期"]] >=20220601
import pandas as pd
df=pd.read_excel("data.xlsx")
df=           
df=df.reset_index(drop=True) #重新設置索引,從 0 開始遞增
(2)繪制6月份價格穩定情況線形圖,部分Python程序如下,請在劃線處填入合適代碼。
import matplotlib.pyplot as plt
cols=df.columns[1:] #存儲各商品名稱
n=①   
m=len(cols)
diff=[0]*m
for i in range(m):
  s=0
  for j in range(1, n):
    day_diff=abs(df[cols[i]][j]-df[cols[i]][j-1]) #計算每天價格波動
    s+=day_diff
  ②   
x,y=cols,diff
plt.plot(③    )
plt.show()
(3)由圖 b 可知,該超市 6 月份各商品價格最穩定的是    。(單選,填字母)
A.商品 A B.商品 B
C.商品 C D.商品D
E.商品 E
答案 (1)AC (2)①len(df) ②diff[i] = s 
③x,y (3)B
2.某校高三首考后,匯總了學生 7 選 3 成績,skcj.xlsx 文件部分數據如a 所示,劉老師用Python 程序,來分析各班技術的考試成績。
(1)從圖a的skcj.xlsx文件,可提取出每位選考技術同學的技術成績,在劃線處填寫相關代碼。
import pandas as pd
df=pd.read_excel("skcj.xlsx")
df['技術賦分']=0 #增加一列用來存放技術成績
for i in range(len(df)):
  for j in range(1,4):
    if df.at[i, '科目' + str(j)] == '技術':
      df.at[i, '技術賦分']=   
      break
(2)因表彰需要,降序顯示成績前 n 名的同學,由于可能出現同分,實際顯示人數可以超過 n,顯示結果如圖b。
n=5#設定表彰人數 n
df=df.sort_values(①    )
index=df.index[n - 1]
score=df.at[index, '技術賦分'] #求出表彰的最低分數線
df2=②    
print(df2[['姓名','技術賦分']])
(3)編寫代碼繪制如圖 c 所示圖表,其中有①     個班優生(>=85分)人數超過 10 人,為實現該功能,下面劃線處的代碼應選擇②     。(多選:填字母)
A.plt.bar(g.班級, g.技術賦分)
B.plt.bar(g['班級'], g['姓名'])
C.plt.bar(g.index, g.技術賦分)
D.plt.bar(g.index, g['姓名'])
#找出df中技術優生(>=85分),并另存為 df1(代碼省略)
g=df1.groupby('班級').count()
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
plt.title('技術優生人數統計')
        #多選題
plt.show()
答案 (1)df.at[i, "科目"+str(j)+ "賦分"]或df["科目"+str(j)+"賦分"][i] (2)①"技術賦分",ascending= False ②df[df.技術賦分>=score]或
df[df["技術賦分"]>=score] (3)①2 ②CD
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 pd
xb=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 plt
plt.rcParams [ 'font.sans-serif']=[ 'SimHei']
#圖表顯示中文字體
plt.title(xb +"生取名常用字")
plt.bar(df3.字,      )
plt.show()
(4)由圖c可知,全校女生名字中出現過30次以上的字有    (填數字)個。
答案 (1)①df.at[i,"性別"]==xb或df["性別"][i]==xb 或df.性別[i]==xb ②mz (2)D
(3)df3.個數或 df3["個數"] (4)6
解析 本題考查利用Pandas進行數據統計。(1)①找出同性別學生中的每個字,因此索引i的學生性別與函數參數xb相同。②將所有的字存儲在列表mz并返回。(2)字典存儲姓名中的字,利用該字典創建一個包含"字"和"個數"兩列的DataFrame對象,并按字進行分組統計,字是分組的標準,統計的結果在個數列,統計出現最頻繁的10個字,需對個數列降序排序。(3)每個字的數量保存在個數列中。(4)略。
4.收集某地2022年全年的天氣數據,按日期順序儲存在“tqqk.xlsx”文件中,部分界面如圖a所示。
為計算每月空氣質量為優的日期中的平均溫差。編寫Python程序,請回答下列問題:
(1)計算并篩選出空氣質量為優的記錄信息,Python程序段如下,請在劃線處應填入合適的代碼。
import pandas as pd
df=pd.read_excel("tqqk.xlsx")
df["溫差"]=df["最高溫度"]-df["最低溫度"]
dfy=        
dfy=dfy.sort_values("日期",ignore_index=True)
(2)計算滿足條件的日期中的平均溫差。并繪制線形圖,部分Python程序段如下,請在劃線處填入合適的代碼。
import matplotlib.pyplot as plt
i=0
avewc=[] #月平均溫差
while i  j=i+1
  tot=dfy.at[i,"溫差"]
  while j<=len(dfy)-1 and dfy.at[i,"日期"][5:7]==dfy.at[j,"日期"][5:7]:
    ①   
    j+=1
  avewc.append(round(tot/(j-i),2))
  ②   
x=['1月','2月','3月','4月','5月','6月','7月','8月','9月','10月','11月','12月']
y=③   
plt.plot(x,y,label="月平均溫差")
#設置繪圖參數,顯示如圖b所示線型圖,代碼略
(3)由圖b可知,月平均溫差超過8的月份共有    個。
答案 (1)df[df.空氣質量=='優'] (2)①tot+=dfy.at[j,"溫差"] ②i=j ③avewc (3)6
5.為了解學生在食堂和校園超市的消費情況,學校把 9 月 1-4 日各個窗口的消費數據導出并保存在“eat. xlsx”文件中,數據格式如圖a所示。如圖b所示,1-14 號窗口為食堂一樓,15-28 號是食堂二樓,29-34號是校園超市。
用Python讀取該文件并作數據分析后輸出如圖c所示結果,請回答下列問題。
(1)讀入數據后,需要將數據集 df 中的數據按窗口號設置相應的位置信息:
#引用 pandas 及 matplotlib,并設置參數,代碼略
df=pd.read_excel('eat.xlsx')
df['位置']=''  #增加'位置'列,初始值為空
for i in ①    :
  if df['窗口'][i] <=14:
    df['位置'][i]='食堂一樓'
  elif ②    :
    df['位置'][i]='食堂二樓'
  else:
    df['位置'][i]='校內超市'
劃線①處應填寫代碼:      (單選,填寫字母:A. df.index /B. df.columns /C. df.values);劃線②處應填寫代碼:      。
(2)完成窗口號設置后,統計各個位置的金額總和,代碼如下:
a=['校內超市','食堂一樓','食堂二樓']
b=[0,0,0] #存儲各個位置的消費總金額
for x in df.values:
  for i in range(3):
    if x[5] == a[i]:
     ①   
plt.bar(②    ) #輸出如圖c所示圖表
plt.show()
劃線①處代碼為:    ,劃線②處代碼為:    。
(3)觀察圖c可知,消費總金額最多的位置是    。(單選,填字母)
A.校內超市 B. 食堂一樓 C. 食堂二樓
答案 (1)①A ②df['窗口'][i] <=28 (2)①b[i] +=x[3] 或 b[i]=b[i]+x[3] ②a,b (3)C
解析 (1)①變量i表示df的行索引。②15-28表示食堂二樓,因此在不滿足第一條件情況下,只要小于等于28即可。(2)①變量x表示df.values一行數據,其中x[3] 消費金額,x[5]表示消費位置。對相應的樓層消費金額進行累加。②圖表的橫軸為消費樓層,縱軸為各樓層消費金額。(3)略。
6.小陳在氣象部門得到了一份2022年不同城市的月平均日照時數(單位:kW·h/m2/day)數據,存放在Excel文件“日照.xlsx”中。部分界面如圖a所示。
請回答下列問題:
(1)第1步,小陳編寫了如下代碼。
import pandas as pd
df=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]
  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平方米的光伏發電板共①    塊。
(日均發電量=電池板的容量/塊×塊數×平均日照時數×充放電效率)
建設光伏發電設備前要先獲得當地的平均日照時數情況,小陳通過如下代碼獲取相關數據。
res=df[df["城市名"]=="溫州市"]
res=res.values[0][1:13].②   
print("溫州市月平均日照最小值為”,res)
答案 (1)計算每個城市的年度平均日照時數
(2)C (3)①52 ②min()
7.某單位正式員工的基本工資計算公式為:基本工資=崗位工資+薪級工資,如圖a和圖b,分別對應salary1.xlsx文件和salary2.xlsx文件。員工入職單位一年后轉正,定崗位等級為十三級,根據學歷定起始的薪級,中專2級、大專5級、本科7級、碩士11級、博士14級。轉正定級后,薪級每年增加一級。
為統計分析該單位員工的工資情況,編寫Python程序。請回答下列問題:
(1)定義崗位工資和薪級工資標準查詢的兩個函數。
gwgz函數功能為:讀取salary1.xlsx文件,根據崗位等級m,返回對應的工資標準,例如m=“十三級”,gwgz(m)=1585。函數代碼如下,劃線處應填入的代碼為    。(單選,填字母)
A.df1.'崗位等級'[i]==m
B.df1[崗位等級][i]==m
C.df1['崗位等級'][i]==m
D.df1[i]['崗位等級']==m
import pandas as pd  
def gwgz(m):
  df1=pd.read_excel('salary1.xlsx')
  for i in df1.index:
    if    :
      return df1.at[i, '工資標準']
xjgz函數功能為:根據薪級等級n,返回對應的工資標準,例如n=10,xjgz(n)=661,代碼略。
(2)現有員工信息表info.xlsx,所有員工都已經過了實習期,如圖c。統計各學歷的人數和基本工資的平均值,編寫Python程序。請回答下列問題:
import datetime
dic={'中專':2,'大專':5,'本科':7,'碩士':11,'博士':14}
time=datetime.date.today() #獲得當前的年月日
now_year=time.year #獲取年份
now_month=time.month #獲取月份
df=pd.read_excel('info.xlsx')
for i in df.index:  
  station=df.at[i, '崗位等級']
  past_year=int(df.at[i, '入職年月'][:4])
  past_month=int(df.at[i, '入職年月'][5:])
  if now_month >=past_month:
    grade=now_year-past_year-1
  else:
    grade=now_year-past_year-2
  grade +=①   
  df.at[i, '基本工資'] =②     #計算員工的基本工資
#對各學歷的員工計算平均基本工資和統計人數
df1=df.groupby('學歷',as_index=False).agg({'基本工資':'mean','姓名':'count'}) #修改列名
df2=df1.rename(columns={'基本工資': '平均工資', "姓名": "人數"}) #圖表對象初始化,代碼略
ax1.bar(df2.學歷, df2.平均工資, label="平均工資") #繪制柱形圖
ax2.plot(df2.學歷,③    , label="人數")
#繪制線形圖
fig.legend()
plt.show()
(3)目前該單位平均工資為3867.33元,由圖d可知,學歷為    的員工,他們的平均工資與公司平均工資相差最大。
答案 (1)C (2)①dic[df.at[i,'學歷']] ②gwgz(station)+xjgz(grade) ③df2.人數 
(3)博士
解析 本題考查Pandas數據處理。(1)根據崗位等級m,返回對應的工資標準。(2)①grade表示工作年限,其值為參加工作時間加上學歷時間(讀大學的年數)。②計算員工的基本工資,基本工資=崗位工資+薪級工資 。③線性圖的縱軸為人數。(3)略。
8.小紅從網上下載收集了浙江省部分海島2022年10月-12月的天氣預報信息,存儲在Excel文件中,包含預報時間、站點編號、浪高、溫度、風向以及風速,如圖a所示,海浪等級信息如圖b所示,她要編寫一個Python程序快速對海島天氣數據進行分析。
浪高值 風浪等級
0 無浪
1-10 微浪
10-25 小浪
25-100 中浪
>100 大浪
圖b
(1)為了獲取該數據集中預報信息最多的海島站點編號及該島某月各風浪等級的預報次數,小紅需要對圖a所示的表中數據進行整理,下列說法正確的是    。(多選,填字母)
A.第4行和第5行數據重復,刪除其中一行即可
B.通過檢測發現D7單元格的數據存在錯誤,應進行修正
C.刪除“風向”和“風速”兩列數據,不影響分析結果
D.“浪高”為0的數據沒有任何價值,可以直接刪除
(2)小紅利用整理好的數據,編寫并運行程序,求出預報信息最多的海島站點編號并根據給定月份,分析該月的數據并可視化,可視化結果如圖c所示,請在劃線處填入合適的代碼。
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['KaiTi','SimHei','FangSong'] #設置中文字體顯示
df=pd.read_excel("浙江省海島預報信息.xls")
def zhengli():  #整理數據
  df["風浪等級"]="無浪"
  for i in df.index:
    t=df["浪高"][i]
    if t>100:
      df["風浪等級"][i]="大浪"
    elif t>25:
      df["風浪等級"][i]="中浪"
    elif t>10:
      df["風浪等級"][i]="小浪"
    ①    :
      df["風浪等級"][i]="微浪"
for i in df. index: #截取"預報時間"列中的月份日期信息,添加到"月份"列和"日期"列
  df.at[i,"月份"]=str(df.at[i,"預報時間"])[5:7]
  df.at[i,"日期"]=str(df.at[i,"預報時間"])[8:10]
zhengli()
df1=df.groupby(②    , as_index=False).count()
df1_sort=df1.sort_values("預報時間" , ascending=False,ignore_index=True)
top=df1_sort["站點編號"][0]
print("預報信息最多的海島站點編號是:", top)
df2=df[df.站點編號==top]
m=input("請輸入要查詢的月份:")
df3=③   
df3=df3.groupby("風浪等級").預報時間.count()
x=df3.index
y=df3.values
plt.plot(x,y)
#設置繪圖參數,繪制如圖c所示線形圖,代碼略。
(3)觀察圖c圖表可知,該海島12月出現天數最多的風浪等級為    。
答案 (1)BC (2)①elif t>=1或elif t>0 
②"站點編號" ③df2[df2.月份==m] (3)微浪
二、能力提升
9.小明收集了某學校某次模考技術成績的數據,存儲在文件“cj.xlsx”中,其中“xx1”表示信息選擇題1,共12個選擇題。每小題的分值是2分,如圖a所示。
各班吻合度偏差較大人數統計如下:1班3人2班7人3班7人4班11人5班5人
圖b
                
(1)從圖a中第一行數據看,該行數據存在的問題是    。(單選,填字母)
A.數據缺失 B.邏輯錯誤
C.格式不一致 D.數據異常
(2)技術學科包含信息技術與通用技術,需要我們關注學科的平衡,而衡量學科平衡的重要指標是學科吻合度,采用得分差來判斷(3分一級:0~2分為0級偏差,3~5分為1級偏差,以此類推),現需要編寫Python程序計算吻合度偏差值,并統計各班偏差較大的人數(吻合度>=3),輸出結果如圖b所示。代碼如下,請在劃線處填入合適的代碼。
import pandas as pd
plt.rcParams["font.sans-serif"]=["SimHei"]
df=pd.read_excel("cj.xlsx")
df=df[df.技術!=0]
n=len(df)
info=[]
bjc={1:0,2:0,3:0,4:0,5:0} #存儲各班吻合度>=3的人數
for i in range(n):
  info.append([df.班級[i],df.姓名[i],df.信息[i],df.通用[i]])
  diff=info[i][2]-info[i][3]
  info[i].append( ①     )
  print(info[i][0],"班",info[i][1],"吻合度級別:",info[i][4])
  if info[i][4]>=3:
    ②    
print("各班吻合度偏差較大人數統計如下:")
for bj in bjc:
  print(bj,"班",bjc[bj],"人")
(3)想知道12個信息技術選擇題的難度系數(難度系數=平均分/分值),選出錯誤率最高的5個小題。小明編寫程序如下,求各題的難度系數并給錯誤率最高的5個小題繪制了如圖c所示的柱形圖。
import matplotlib.pyplot as plt
dif=[]
for i in df.columns[5:]:
  dif.append(round( ①     /2,2))
dic={"題號":df.columns[5:],"難度系數":dif}
df1=pd.DataFrame(dic)
df1=df1.sort_values("難度系數")
plt.figure(figsize=(8,4))
plt.title("信息難度最大的5道題對比圖")
plt.bar(②     )
plt.xlabel("題號")
plt.ylabel("難度系數")
plt.show()
答案 (1)B (2)①abs(diff)∥3 ②bjc[info[i][0]]+=1 (3)①df[i].mean() ②df1.題號[0:5], df1.難度系數[0:5]
解析 (1)數據存在的問題主要有數據缺失、數據重復、數據異常、邏輯錯誤、格式不一致等。選擇題每題的分值為2屬于邏輯錯誤。(2) ①計算得分差來判斷。3分一級:0~2分為0級偏差,3~5分為1級偏差,以此類推。②統計吻合度。info[i][0]存儲為班級,字典bjc存儲各班的吻合度,依次遍歷每位同學的數據,若吻合度>=3,相應班級計數加1。(3)①計算各題平均分。表達式i in df.columns[5:],i為列標簽,難度系數=平均分/分值,統計該列的平均分為df[i].mean()。②制作圖表數據源,兩列數據為題號和難度系數,有題意可知取前5,所以此空為df1.題號[0:5], df1.難度系數[0:5]。
10.學校暑期開展“青春迎亞運”活動,邀請高二學生每日參加運動鍛煉并進行線上打卡。每周收集一次相關數據,分別保存在相應的xlsx文件中,部分文件如圖a所示;每個文件記錄了一周7天的打卡數據,示例如圖b所示,其中運動時長單位:分鐘。
為統計分析學生鍛煉情況,給出周報數據,編寫Python程序,請回答以下問題:
(1)定義px函數,功能為:讀取某一周的打卡數據,將其按班級進行排序操作并返回結果。函數代碼如下,將劃線處代碼補充完整。
import pandas as pd
def 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 plt
s=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=0
while 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所示,由圖可知,該周參與人氣最高的運動項目為       。
答案 (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)略。
11.小明通過調查問卷收集了食堂滿意度情況數據,保存在“data.csv”文件中,如圖a所示。
為統計分析每個調查項目不同選項的人數及不滿意率,編寫Python程序。請回答下列問題:
(1)統計每一項調查內容的總票數、滿意、一般及不滿意人數,程序運行結果如圖b所示,請在劃線處填入合適的代碼。
import pandas as pd #導入 pandas 模塊
import matplotlib. pyplot as plt #導入 pyplot 模塊
plt. rcParams["font. sans-serif"]=["SimHei"]  #設置圖表顯示中文字體
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所示,請在劃線處填入合適的代碼。
df2["不滿意率(%)"]=①   
x=②   
y=df2["不滿意率(%)"]
plt.figure(figsize=(8,4))
pl.title("食堂調查問卷不滿意率(%)情況")
plt.bar(x,y,label="不滿意率(%) ")
plt.legend()
答案 (1)①colname ②dfc.at[j,"序號”]或dfc["序號”][j]或dfc.序號[j] (2)①df2["不滿意"]/df2["總票數"]*100或df2["不滿意"]/po1l*100或df2.不滿意/df2.總票數*100或df2.不滿意/pol1*100或其它等價答案 ②df2["調查項目"]或df2.調查項目
12.小王收集了所在學校高三年級一周預定套餐數據,保存在“yzte.xlsx” 文件中,部分數據如圖a所示。編寫Pyhon程序,分析高三各班一周各套餐預定情況,確定各班“班級最喜愛的套餐”和“校一周預定套餐之王”。
(1)讀取 EXCEL文件“yzte.xlsx”中的數據,統計高三各班套餐一周的預定量,輸出統計結果,格式如圖b 所示。下列劃線部分應依次填寫       。(單選,填字母)
A.groupby('班級')[columns].sum()
B.groupby('班級',as_index=False).sum()
C.groupby('班級')[columns].count()
D.groupby('班級',as_index=False).count()
import pandas as pd
df=pd.read_excel(' yzte.xlsx')
columns = df.columns[3:]
df=df.        
print(df)
(2)每班一周套餐預定量最多的套餐為本班“班級最受歡迎的套餐”,統計每種套餐被各班列為“班級最受歡迎”的班級數量。請為下面劃線部分填寫合適代碼。
df["班級套餐之最"] = df.max(axis=1)
result ={};count ={}
for index in df.index :
  for column in columns:
    if df["班級套餐之最"][index]==①         :
      if column in result :
        result[column].append(index)
        count[column] += 1
      else:
        result[column] =②   
        count[column]=1
df1=pd.Series(count)
(3)根據第(2)小題的統計結果,繪制如圖c所示圖表,由圖可知,“校一周預定套餐之王”為①   
下列是部分繪圖代碼,請在劃線處填寫合適代碼。
import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"]=["song Ti"]
plt.title("一周預定套餐之王判定圖")
plt.bar(count.keys(),②    )
plt.show()
答案 (1)A (2)①df[column][index]
②[index] (3)①套餐A ②count.values(共84張PPT)
課時3 利用Pandas模塊處理數據
第四章 數據處理與應用
1.掌握Pandas模塊的兩種數據結構Series和DataFrame。
2.學習使用Pandas模塊對數據進行編輯、計算、統計、分析。
3.會使用Python進行簡單數據處理,并能從其中提取有用信息形成結論。
目 錄
CONTENTS
知識梳理
01
例題精析
02
隨堂檢測
03
鞏固與提升
04
知識梳理
1
1.常用的Python擴展模塊有Numpy、Scipy、Pandas和Matplotlib等,Pandas模塊主要用于數據的處理和分析。
2.Python中引入Pandas模塊的方法:import pandas as pd,pd是用戶為導入模塊取的別名。
3.pandas提供了Series和DataFrame兩種數據結構。
(1)Series(系列)
①Series是一種一維的數據結構,包含一個數組的數據和一個與數據關聯的索引(index),索引值默認是從0起遞增的整數,數據可以是不同類型的元素。列表、字典等可以用來創建Series數據結構。
②Series對象屬性
屬性 說明
index Series的下標索引,其值默認是從0起遞增的整數,也可以指定為字符串型
values 存放Series值的一個數組
(2)DataFrame(數據框)
①DataFrame是一種二維的數據結構,由1個索引列(index)和若干個數據列組成,每個數據列可以是不同的類型。DataFrame可以看作是共享同一個index的Series的集合。
創建DataFrame對象的方法很多,通常用一個相等長度的列表或字典來創建。
②DataFrame常用對象屬性
屬性 說明
index DataFrame的行索引
columns 存放各列的標題
values 存放二維數據的值
T 行列轉置
4.數據可視化是將數據以圖形圖像等形式表示,直接呈現數據中蘊含信息的處理過程。
5.matplotlib繪圖
(1)matplotlib是一個繪圖庫,使用其中的______________子庫提供的函數可以快速繪圖和設置圖表的坐標軸、坐標軸刻度、圖例等。
(2)引入matplotlib的pyplot子庫的方法為:
____________________________。
6.可視化的作用
____________________、______________、增強數據的解釋力與吸引力等。
pyplot
import matplotlib.pyplot as plt
快捷觀察與追蹤數據
實時分析數據
7.數據以可視化方式展現出來,用戶可以通過直觀、交互的方式瀏覽和觀察數據,發現數據中隱藏的______、______和______。如“百度地圖”“百度指數”“航班飛行實時跟蹤地圖”等。
8.可視化的工具
(1)常見的數據分析中一般包含創建可視化圖表功能,主要用于數據可視化的工具有大數據魔鏡、Gephi、Tableanu等。
(2)使用Python、R等計算機語言編寫程序實現數據的可視化。
(3)可視化工具庫,如基于JavaScript的D3.js、Highcharts、GooleCharts等,基于Python的matplotlib等。
特征
關系
模式
9.可視化的典型案例
數據以可視化方式展現出來,用戶可以通過直觀、交互的方式瀏覽和觀察數據,發現數據中隱藏的特征、關系和模式,如“風、氣象、海洋狀況的全球地圖”、“百度地圖”、“百度指數”、“編程語言之間的影響力關系圖”、“航班飛行實時跟蹤地圖”、“微博熱詞趨勢圖”等。
重難點剖析
1.Pandas模塊中的Series對象
(1)創建Series
import pandas as pd
s1=pd.Series([1,2,3,4])
s2=pd.Series([1,2,3,4],index=["a","b","c","d"])
(2)Series對象的檢索和修改
輸出索引值為0的值:print(s1[0])
輸出索引值為"b"的值:print(s2["b"])
輸出values小于3的值:print(s1[s1<3])
修改索引值為1的值為10:s1[1]=10
2.Pandas模塊中DataFrame對象
(1)創建DataFrame對象
①使用一個相等長度的列表或字典創建DataFrame對象。
如x=pd.DataFrame({"x1":[1,2,3,4],"x2":[5,6,7,8],"x3":[9,10,11,12]})
②導入二維數據文件創建DataFrame對象。
pd.read_excel(filename) #從Excel文件導入數據
pd.read_csv(filename) #從CSV文件導入數據
③DataFrame對象導出到二維數據文件
df.to_excel(filename) #導出數據到Excel文件
df.to_csv(filename) #導出數據到CSV文件
(2)查看DataFrame對象
通過index、columns、values屬性可以查看DataFrame對象的行索引、列索引及數據,如:df.index、df.columns、df.values。
查看數據列:通過字典記法或屬性檢索DataFrame對象中的一列數據,如:df['id']或df.id。
查看數據行:通過head()、tail()返回DataFrame的前n行、后n行數據;通過索引查看指定行,如:df[2:5],返回df對象中第2、3、4行數據;通過布爾型數據選取滿足條件的行。如:df[df["age"]>=18]。
使用at[]方法可以根據行標簽和列標簽選取單個值,如:df.at[0,"姓名"]。
(3)DataFrame對象中行、列的編輯
可以通過insert()、drop()、rename()、append()、set_value()等函數進行DataFrame對象中行、列的編輯。
(4)DataFrame對象中數據的統計與計算
可以使用count()、sum()、mean()、max()、min()、describe()、groupby()等函數對DataFrame對象中的數據進行統計與計算。
(5)DataFrame對象中數據的排序
按索引排序可以使用sort_index()函數;按值排序可以使用sort_values()函數。通過選項axis=0/1確定排序的軸向,axis默認值為0,縱向排序。
通過選項ascending=True/False確定升/降序,ascending默認值為True,升序排序;排序結果返回一個新DataFrame對象。
例題精析
2
例1 小原爸爸負責接小原放學,一段時間內,他爸爸將每天接他時的堵車時間和天氣情況記錄在文件“data.xlsx”中,其中堵車時間的單位為分鐘,如圖 a 所示,并通過 Python 語言編程制作的圖表如圖 b 所示。
(1)通過對圖 b 的分析可知,天氣情況與堵車時間    (單選,填字母:A.有/B.沒有)一定的關系。
(2)部分程序代碼如下,請在劃線處填入合適的代碼。
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
#用來正常顯示中文標簽
df=pd.read_excel("data.xlsx") #讀取 Excel 文件中的數據
df=df.groupby("天氣情況", as_index = False). ①      #按“天氣情況”分組求平均數
df=df.sort_values(" ②    ",ascending= False)
x=③   
y=df["堵車時間"]
plt.title("不同天氣情況的平均堵車時間分析") #設置圖表標題
plt.bar(x, y) #繪制柱形圖
plt.show()
答案 (1)A (2)①mean() ②堵車時間
③df["天氣情況"]或df.天氣情況
解析 本題考查利用Pandas模塊統計數據和利用pyplot繪制圖像相關操作。(1)從題圖 b 可以看出,最堵的時間與天氣及雨勢大小相關。(2)①分組后用mean求平均數。②降序排序的參數為 ascending=False。從題圖b中可以得知為按堵車時間降序排列。(3)題圖 b的x 軸數據為“天氣情況” ,而 df 已按“天氣情況”進行了分組。
變式訓練1 某學校運動會高一年級各個選手得分情況存儲在“運動會得分.xlsx”數據文件中(如圖a所示),現準備利用Python程序對這些數據進行統計分析并可視化,請根據要求回答下列問題(注: 已對重名做技術處理)。
(1)文件“運動會得分.xlsx”中的數據是        (選填:結構化數據/半結構化數據/非結構化數據)。
(2)編寫如下Python程序,統計各班總分,并建立圖b所示圖表:
import pandas as pd
import matplotlib.pyplot as plt
df=pd.read_excel("運動會得分.xlsx")
#統計各班總得分情況,并建立圖表,如圖b所示
df1=df1.sort_values("班級",ascending=True)
#按班級升序排列
df1=df.groupby(①    ,as_index=False).②     #統計各班總得分
plt.title("高一年級各班總分匯總圖")  #添加圖表標題
plt.bar(df1["班級"],③     )
plt.show()
#輸出本年級最具價值運動員,最具價值運動員是本年級中得分最高的運動員,圖c所示
df3=df.groupby("姓名",as_index=False).得分.sum()
maxdf=df3.得分.max()
print("最具價值運動員:")
print(④     )
答案 (1)結構化數據 (2)①"班級" ②sum() ③df1["得分"]或df1.得分 
④df3[df3["得分"]==maxdf]或df3[df3["得分"]>=maxdf]
解析 本題考查利用Pandas模塊統計數據和利用pyplot繪制圖像相關操作。(1)Excel文件按行按列存儲數據,屬于結構化數據。(2)統計各班總得分,需按班級進行分組,并對每個班級得分進行求和操作。因此①為班級,②為sum()函數進行求和。③圖表縱軸為每個總分之和,因此③為df1對象中的得分列。④最具價值運動員可能有多名,因此應篩選出得分大于或等于最高分的記錄。
例2 2023 年女足世界杯小組賽晉級規則為:32 支參賽隊伍通過抽簽分為八個小組,每個小組分別有四支球隊進行比賽,勝平負分別積 3 分、1 分、0 分。每個小組積分的前兩名球隊晉級,積分相同的凈勝球多的球隊晉級,凈勝球相同的進球數多的球隊晉級。小組賽數據存放在“女足世界杯小組賽積分.xlsx”文件中,如圖 a 所示。
現用 Python 程序對表中數據進行處理,得到 16 支晉級球隊名單,并輸出如圖 b 所示的圖表。
(1)定義 tj 函數,功能為:使用 Pandas 讀取文件數據,計算每支球隊的積分,并返回一個 Dataframe 對象。實現相應功能的 Python 函數代碼如下,劃線處應填入的代碼為    。
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
#顯示中文
def tj(filename): #filename 為 excel 文件名稱
  df=pd.read_excel(filename)
  for i in df.index:
    df.at[i,"積分"]=   
  return df
(2)定義jsq函數,將Dataframe對象df中的“進失比”列(如數據"8比1",8為進球數,1為失球數,凈勝球數為7)求出各球隊的凈勝球、進球數。劃線處應填入的代碼為    。
def jsq(df):
  for i in df.index:
    a,b=map(int,df.at[i,"進失比"].split("比")) #8比1,則a=8,b=1
          
    df.at[i,"進球數"]=a
  return df 
(3)為了求出八個小組中晉級名單,按照小組A~H、積分由高到低的順序,繪制圖表如圖b所示。實現相應功能的代碼如下:
filename="女足世界杯小組賽積分.xlsx"
df=tj(filename)
df=①    
#以“小組”為主要關鍵字升序,“積分”“凈勝球”“進球數”為次要關鍵字降序排列
df=df.sort_values(["小組",'積分', "凈勝球" ,'進球'],ascending=[②     ,False,False,False]) #按小組分組并取出每組前 2 隊數據
df1=df.groupby(③    ,as_index=False).head(2)
plt.bar(④    ) #繪制如圖 b 所示圖表
plt.title('2023 女足世界杯 16 強球隊')
#設置圖表格式,代碼略
plt.show()
答案 (1)df.at[i,"勝"] * 3 + df.at[i,"平"]
(2)df.at[i,"凈勝球"] = a - b (3)①jsq(df) 
②True ③"小組" ④df1["球隊"],df1["積分"]
解析 本題考查利用Pandas進行數據統計的相關知識。(1)計算每支球隊的積分。勝平負分別積 3 分、1 分、0 分,因此每個單元格的計算公式為df.at[i,"勝"] * 3 + df.at[i,"平"]。(2)計算各球隊凈勝球,變量a表示進球數,變量b表示失球數,凈勝球的值為a-b數。(3)①調用jsq函數,計算df中的“進失比”列。②以“小組”為主要關鍵字升序,升序的ascending值為True。③繪制各個小組的積分情況,因此需按小組進行分組并取出每組前2 隊數據。④圖表橫軸為各小組前2名df1["球隊"],縱軸為各小組對應的積分df1["積分"]。
變式訓練2 張三同學收集了一個地區 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 所示,請在劃線處填入合適的代碼。
import pandas as pd
import matplotlib.pyplot as plt
df=pd.read_excel("shared_bikes.xlsx")
bike=[ "哈羅單車","摩拜單車","美團單車","青桔單車"]
sm=[0] * 4
avg=[0] * 4
days=31
for i in ①    :
  t=cal(df.at[i, "結束時間"]) - cal(df.at[i,
"開始時間"])
  for j in range(len(bike)):
    if df.at[i, "App 類型"]==bike[j]:
      ②   
      break
for i in range(len(bike)):
  avg[i]=sm[i]/days
plt.figure(figsize=(12,4))
x=bike
y=③    
答案 (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)騎行次數應對分組后數據進行計數。
例3 小紅收集了部分城市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 pd
def 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]*12
mdays=[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月平均濃度超過年平均濃度的月份共    個。
答案 (1)D (2)①mdays[m] ②sm += sd ③pm (3)5
解析 (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月。
變式訓練3 小林收集了各地市各年份檢測的 PM2.5 濃度值保存于 Excel 文件“PM2.5.xlsx”中,部分數據如圖 a 所示。小林使用Python 進行數據分析,請回答以下問題。
(1)小林先將同一個地區的數據輸出到各自獨立的 Excel 文件中,部分結果如圖 b 所示,實現程序如下所示:
import pandas as pd
import matplotlib.pyplot as plt
df=pd.read_excel("PM2.5.xlsx")
#cities 保存所有地區名稱,這里僅演示部分數據
cities=["安吉縣", "淳安縣", "慈溪市", "杭州市", "湖州市"]
for city in cities:
  dfc=   
  dfc.to_excel(city + ".xlsx", index=False) # 輸出文件結果示例如圖 b 所示
那么劃線部分語句可以是    (注:全部選對的得 2 分,選對但不全的得 1 分,不選或有選錯的得 0 分)
A.df[df["地區名稱"]==city]
B.df[df["地區名稱"]]==city
C.df[df.地區名稱==city]
D.df[df."地區名稱"]]==city
(2)對于圖 a 所示的原始數據,小林要進行數據整理:刪除“地區編碼”、“指標名稱”、“計量單位”等對后面統計無用的數據列,請將劃線處②的語句補充完整。
df=pd.read_excel("PM2.5.xlsx")
#刪除“地區編碼”、“指標名稱”、“計量單位”數據列
df=df.drop(["指標名稱", "地區編碼", "計量單位"], axis= ①   )  #同一個地市取 PM2.5 濃度最高的值
dfg =②   
#按 PM2.5 的值升序排序
dfg=dfg.sort_values("PM2.5", ascending=True)#輸出排序后的最后五行結果
print(dfg.tail())
(3)對于整理后的數據,在同一個地市中取歷次 PM2.5 濃度檢測值最高的值,最后按 PM2.5 升序排序數據,輸出結果如圖c 所示,則第②空應填寫的語句是    。(單選,填字母)
A.df.groupby("PM2.5").max()
B.df.groupby.地區名稱.max()
C.df.sort_values("PM2.5").max()
D.df.groupby("地區名稱").max()
(4)將排序后的數據分別取 PM2.5 檢測值最高和最低的五行數據合并成新的 DataFrame 對象后繪制成柱形圖如圖d 所示。請將程序補充完整。
df2=pd.concat([dfg.head(5), dfg.tail(5)]) #合并兩個對象成為新的DataFrame 對象
plt.rcParams['font.sans-serif']=['KaiTi','SimHei','FangSong'] #設置圖表字體
plt.figure(figsize=(8,4))
plt.title("部分縣市 PM2.5 濃度對比")
plt.xlabel("PM2.5 濃度值")
plt.bar(①     , df2["PM2.5"],color="orange")
for i in range(len(df2)):
  x=df2.index[i]
  y=②   
#text()方法可以繪制數據標簽,語法:text(橫坐標,縱坐標,顯示內容)
plt.text(x, y, '%d' % y)
答案 (1)AC (2)1 (3)D (4)df2.index df2["PM2.5"][i]
解析 本題考查pandas數據處理相關知識。(1)將“地區名稱”符合條件的數據行篩選出來。(2)參數axis=1表示處理列,即刪除指定的列。(3)同一個地市中取PM2.5濃度值最高的數據行可以用分組函數groupby()和求最大值函數max()實現。A選項分組依據不對。B選項的函數格式不對。C選項是按PM2.5先升序排序,然后求所有數據中的最大值,此時PM2.5最大值只有一個數據,無法求出各個地市的最大值。(4)plt.bar()函數繪制柱形圖需要兩個參數:x軸數據和y軸數據(每個x對應的縱軸數據),由題中圖c和圖d可知,橫坐標是各個地區的名稱,而由于數據框df2是分組后的結果,地區名稱列已經成為了索引列。②空由程序和標簽的效果圖可知df2.index[i]取出了每行數據的橫坐標值,對應的縱坐標值是df2["PM2.5"][i]。
隨堂檢測
3
1.近期學校進行了一次技術學考模擬考試,教師將各班級的部分同學數據錄入了“考試成績.xlsx”文件中(如圖a 所示),為了根據學生成績評定等級,教師特地編寫了一個 Python 程序。
(1)觀察圖 a,下列關于“考試成績.xlsx”中數據存在的問題以及對應的解決方式中,正確的是    。(多選題,多選,錯選均不得分,漏選得 1 分)
A.數據重復應在進一步審核的基礎上進行合并或刪除等處理
B.數據缺失將上一條數據記錄中的數據復制
C.格式不統一進行數據轉換,形成統一格式
D.邏輯錯誤再次訪問數據源,驗證數據是否正確
(2)在解決數據問題后,進行進一步數據處理,要求如下:
a.按照等級評定規則,若學生成績大于等于 85 分,則等級為優秀,否則等級為合格;
b.統計各班級的優秀人數,生成柱形圖(如圖 b 所示)。現編寫程序如下,請在劃線處填入合適的代碼:
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] 
#繪圖時正常顯示中文標簽
plt.rcParams['axes.unicode_minus']=False #繪圖時使用 Unicode 字符
df=pd.read_excel('考試成績.xlsx')
for i in range(len(df)):
  if ①    :
    df.at[i, "等級"]="優秀"
  else:
    df.at[i, "等級"]="合格"
df=②      #篩選出等級為優秀的學生
g=df.groupby("班級", as_index=True).count()
     
plt.title("各班級優秀人數")
plt.③     #顯示圖例
plt.show()
(3)若要生成如圖 b 所示的圖表,加框處的代碼應為下列選項中的    。(填字母)
A.plt.bar(x,y,label="優秀人數")
B.plt.bar(g.班級,g.等級,label="優秀人數")
C.plt.bar(g.index,g.等級,label="優秀人數")
D.plt.bar(df.index,df.等級,label="優秀人數")
答案 (1)AC (2)①df.at[i,"技術"]>=85 或者df["技術"][i]>=85 或者df.技術[i]>=85
②df[df.等級=="優秀"]或者 df[df["等級"]=="優秀"] ③legend( ) (3)C
2.為了完善某學校食堂管理、持續提高食堂服務質量,讓全校師生更加精神飽滿地開展工作、學習,對學校食堂進行了一些調查,調查項目共 5 項(具體內容略)。學校后勤管理謝老師收集了 12 個班級的調查結果,分別存儲在“dy01.csv”、“dy02.csv”、... 、“dy12.csv”等 12 個文件中(如圖 a 所示),每個文件部分界面如圖 b 所示。
現需要分析 12 個班級學生對這 5 個問題的選“A”情況。謝老師用 Python 的 pandas模塊編寫了以下代碼,實現相關問題的解決。請回答下列問題。
(1)定義了 fun_A()函數實現了統計某個班級 5 個問題的選“A”的人數情況。Python程序代碼如下,請在劃線處填入合適代碼。
import pandas as pd
def fun_A(file):
  df=pd.read_csv(file)
  A_list=[]
  for i in df.columns[1:]:
    j=c=0
    while j      if     :
        c+=1
        j+=1
    A_list.append(c)
  return A_list
(2)調用上述函數,處理 12 個班級每個問題的選“A”的總人數,Python 程序代碼如下,請在劃線處填入合適代碼。
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 #每個問題選 A 的人數
  for j in range(12):
    ②   
  y[i]=s
(3)經上述處理后,接著以圖的形式匯報結果(如圖 c 所示),Python 程序代碼如下,請回答下列問題。
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
#圖表顯示中文字體
plt.title("每個問題選 A 的總人數")
    
plt.legend()
plt.show()
劃線處代碼合適的是    。(單選,填字母)
A.plt.bar(x,y)
B.plt.bar(x,y,label='A 選項')
C.plt.plot(x,y)
D.plt.plot(x,y,label='A 選項')
(4)調查數據的有效問卷共 550 份,從圖 c 中可
以觀察出有    (填數字)個問題的選“A”
總人數低于 60%。
答案 (1)df.at[j,i]=="A"或df[i][j]=="A"
(2)①s[i:i+2] ②s+=ans_list[j][i]
(3)B (4)2
3.小王收集了 2022 年城市 A 全年每天的部分天氣數據,保存在“2022 天氣.xls”文件中,部分數據如圖a 所示。
(1)為統計 2022 年全年晴、陰、雨……的天數,編寫了如下的 Python 程序:
import pandas as pd
import matplotlib.pyplot as plt
df=pd.read_excel('2022 天氣.xls')
g=     
print('2022 年城市 A 天氣情況統計如下:')
for x in g.index:
  print(x+':' +str(g[x])+'天')
程序運行結果如圖 b 所示,則劃線處應該填入的代碼為    。(單選,填字母)
A.df.groupby('天氣情況')['日期'].sum()
B.df.groupby('天氣情況')['日期'].count()
C.df.groupby('天氣情況').mean()
D.df.groupby('天氣情況').count()
(2)統計 2022 年城市 A 每月平均氣溫并繪制線形圖,部分 Python 程序如下,請在劃線處填入合適的代碼。
s=[0]*12
avg=[0]*12 #存儲每月平均氣溫
mdays=[0]*12
x=[1,2,3,4,5,6,7,8,9,10,11,12]
df['平均溫度']=(df['最低溫度']+df['最高溫度'])/2
for i in range(365):
  ①   
  s[int(month)-1]+=df.at[i,'平均溫度']
  mdays[int(month)-1]+=1
for i in range(12):
  avg[i]=round(②    ,1)
y=③   
plt.plot(x,y) #繪制線形圖
#設置繪圖參數,顯示如圖c 所示線形圖,代碼略。
(3)由圖 c 可知,2022 年城市A 最冷和最熱的月份分別是    。
答案 (1)B (2)①month=df['日期'][i][5:7] 或 month=df.at[i,'日期'][5:7]或 month=df.日期[i][5:7] ②s[i]/mdays[i] ③avg (3)2、8
解析 (1)全年晴、陰、雨屬于天氣情況,因此先對天氣情況分組,表達式str(g[x])為Series對象的values值,因此按日期分組,且分組的索引就是分組的類別,再對其中一列進行計數。(2)①month是每條記錄的月份,df['日期'][i]表示第i天的日期。②avg統計每月的平均溫度,每月的溫度和累加到列表s中,mdays[i]表示某月的天數。③y軸為每個月的平均溫度avg。(3)略。
4.小明為了研究某地近十年每月的溫差變化,編寫Python程序。以2023年4月為例,該月每天的溫度數據分別保存在以8位日期字符串命名的excel文件中,部分文件如圖a所示,每個文件記錄了一天24小時的溫度數據,如圖b記錄了4月28日的數據。
(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所示,請在劃線處填入代碼。
def 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))
答案 (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。
5.某網站服務器五月(31 天)的后臺訪問記錄保存在 log.xlsx 文件中,如圖a所示:
請回答下列問題:
(1)定義 oneday 函數,功能為:讀取日期為 day 的訪問記錄,將訪問地區依次保存在列表 city 中,并返回該列表。函數代碼如下:
import pandas as pd
df=pd.read_excel('log.xlsx')
def oneday(day):
  city=[]
  for i in       :
    if df.at[i,"時間戳"][0:2] == day:
      city.append(df.at[i,"地區"])
  return city
劃線處代碼為:     (單選:A.df.index()/B.df.index/C.df.values()/ D.df.values)。
(2)統計該月每天華東五市的訪問數據,并繪制線型圖,部分 Python 程序如下,請在劃線處填寫合適的代碼。
import matplotlib.pyplot as plt
eastcity = ["上海","南京","杭州","蘇州","無錫"]
x=[i for i in range(1,32)]
y=[]
t=0
for i in range(1,32):
  ①   
  if i < 10:
    day="0" + day
  city=oneday(day)
  for j in city:
    if j in eastcity:
      ②   
    y.append(t)
    t=0
plt.plot(③    )
plt.show()
(3)由圖b可知,該網站本月訪問量低于 4 萬次天數共有     天。
答案 (1)B 或 df.index (2)①day=str(i) ②t+=1 或 t=t+1 ③x,y (3)5
6.某市中考體測規定,考生要在 6 個體育項目中選 3 個進行測試,少選或多選的同學不符合報名要求。全市 1 萬多名考生的報名結果(1 表示選擇該項目)保存在文件“tycs.csv”中,如圖 a 所示。請回答下列問題:
(1)下列有關數據處理的說法正確的是    。(多選,填字母)
A.在對數據進行處理前要進行數據整理,解決數據缺失、數據異常、邏輯錯誤等問題
B.編程處理數據能提高數據分析和挖掘的效率,目前只能采用 Python 語言實現
C.文本數據處理一般過程包括分詞、特征提取、數據分析、結果呈現
D.需要將某個整體中各部分的大小和比例進行可視化展示時,可采用餅圖、環形圖等
E.可使用公式“=SUM(D5,I5)”對 Excel 中第 5 行D 列至I 列中的數據進行求和
(2)定義函數 filter_data 功能為:讀取某市報名的 csv 文件,返回該市所有報名符合要求(在6 個體育項目中選擇3 個)的學生信息。函數代碼如下,劃線處應填入的代碼為     。
import pandas as pd
def filter_data(datafile):
  df=pd.read_csv(datafile) #讀取文件 datafile 中的數據
  df['合計']=df.count(axis=1) - 3
# count 函數統計每行中非空數據的個數
  df1=         
  return df1

(3)統計該市每個組合報名的人數并繪制柱形圖,如圖b 所示,其中各體育項目名稱用相應字母(A~F)代替。部分 Python 程序如下,請在劃線處填寫合適的代碼。
import matplotlib.pyplot as plt
df=filter_data('tycs.csv')
d={'A': '800 米跑', 'B': '跳繩', 'C': '游泳', 'D': '引體向上', 'E': '擲實心球', 'F': '立定跳遠'}
result = {}
for i in df.index:
  ①   
  for key in d:
    t=df.at[i, d[key]]
    if t==1:
      choice += key
  if choice in result:
    ②   
  else:
    result[choice] = 1
x=result.keys() #獲取字典 result 的鍵
y=result.values() #獲取字典 result 的值
plt.bar(x, y) #繪制柱形圖
# 設置繪圖參數,顯示如圖 b 所示柱形型圖,代碼略
(4)由圖b 可知,報名人數最多的組合為    (填寫體育項目的名稱)。
答案 (1)ACD (2)df[df.合計 == 3] (3)①choice = "" ②result[choice] += 1
(4)800 米跑、跳繩、游泳課時3 利用Pandas模塊處理數據
課時目標
1.掌握Pandas模塊的兩種數據結構Series和DataFrame。2.學習使用Pandas模塊對數據進行編輯、計算、統計、分析。3.會使用Python進行簡單數據處理,并能從其中提取有用信息形成結論。
1.常用的Python擴展模塊有Numpy、Scipy、Pandas和Matplotlib等,Pandas模塊主要用于數據的處理和分析。
2.Python中引入Pandas模塊的方法:import pandas as pd,pd是用戶為導入模塊取的別名。
3.pandas提供了Series和DataFrame兩種數據結構。
(1)Series(系列)
①Series是一種一維的數據結構,包含一個數組的數據和一個與數據關聯的索引(index),索引值默認是從0起遞增的整數,數據可以是不同類型的元素。列表、字典等可以用來創建Series數據結構。
②Series對象屬性
屬性 說明
index Series的下標索引,其值默認是從0起遞增的整數,也可以指定為字符串型
values 存放Series值的一個數組
(2)DataFrame(數據框)
①DataFrame是一種二維的數據結構,由1個索引列(index)和若干個數據列組成,每個數據列可以是不同的類型。DataFrame可以看作是共享同一個index的Series的集合。
創建DataFrame對象的方法很多,通常用一個相等長度的列表或字典來創建。
②DataFrame常用對象屬性
屬性 說明
index DataFrame的行索引
columns 存放各列的標題
values 存放二維數據的值
T 行列轉置
4.數據可視化是將數據以圖形圖像等形式表示,直接呈現數據中蘊含信息的處理過程。
5.matplotlib繪圖
(1)matplotlib是一個繪圖庫,使用其中的________子庫提供的函數可以快速繪圖和設置圖表的坐標軸、坐標軸刻度、圖例等。
(2)引入matplotlib的pyplot子庫的方法為:________________________。
6.可視化的作用
______________________、________________、增強數據的解釋力與吸引力等。
7.數據以可視化方式展現出來,用戶可以通過直觀、交互的方式瀏覽和觀察數據,發現數據中隱藏的________、________和________。如“百度地圖”“百度指數”“航班飛行實時跟蹤地圖”等。
8.可視化的工具
(1)常見的數據分析中一般包含創建可視化圖表功能,主要用于數據可視化的工具有大數據魔鏡、Gephi、Tableanu等。
(2)使用Python、R等計算機語言編寫程序實現數據的可視化。
(3)可視化工具庫,如基于JavaScript的D3.js、Highcharts、GooleCharts等,基于Python的matplotlib等。
9.可視化的典型案例
數據以可視化方式展現出來,用戶可以通過直觀、交互的方式瀏覽和觀察數據,發現數據中隱藏的特征、關系和模式,如“風、氣象、海洋狀況的全球地圖”、“百度地圖”、“百度指數”、“編程語言之間的影響力關系圖”、“航班飛行實時跟蹤地圖”、“微博熱詞趨勢圖”等。
1.Pandas模塊中的Series對象
(1)創建Series
import pandas as pd
s1=pd.Series([1,2,3,4])
s2=pd.Series([1,2,3,4],index=[″a″,″b″,″c″,″d″])
(2)Series對象的檢索和修改
輸出索引值為0的值:print(s1[0])
輸出索引值為″b″的值:print(s2[″b″])
輸出values小于3的值:print(s1[s1<3])
修改索引值為1的值為10:s1[1]=10
2.Pandas模塊中DataFrame對象
(1)創建DataFrame對象
①使用一個相等長度的列表或字典創建DataFrame對象。
如x=pd.DataFrame({″x1″:[1,2,3,4],″x2″:[5,6,7,8],″x3″:[9,10,11,12]})
②導入二維數據文件創建DataFrame對象。
pd.read_excel(filename) #從Excel文件導入數據
pd.read_csv(filename) #從CSV文件導入數據
③DataFrame對象導出到二維數據文件
df.to_excel(filename) #導出數據到Excel文件
df.to_csv(filename) #導出數據到CSV文件
(2)查看DataFrame對象
通過index、columns、values屬性可以查看DataFrame對象的行索引、列索引及數據,如:df.index、df.columns、df.values。
查看數據列:通過字典記法或屬性檢索DataFrame對象中的一列數據,如:df['id']或df.id。
查看數據行:通過head()、tail()返回DataFrame的前n行、后n行數據;通過索引查看指定行,如:df[2:5],返回df對象中第2、3、4行數據;通過布爾型數據選取滿足條件的行。如:df[df[″age″]>=18]。
使用at[]方法可以根據行標簽和列標簽選取單個值,如:df.at[0,″姓名″]。
(3)DataFrame對象中行、列的編輯
可以通過insert()、drop()、rename()、append()、set_value()等函數進行DataFrame對象中行、列的編輯。
(4)DataFrame對象中數據的統計與計算
可以使用count()、sum()、mean()、max()、min()、describe()、groupby()等函數對DataFrame對象中的數據進行統計與計算。
(5)DataFrame對象中數據的排序
按索引排序可以使用sort_index()函數;按值排序可以使用sort_values()函數。通過選項axis=0/1確定排序的軸向,axis默認值為0,縱向排序。
通過選項ascending=True/False確定升/降序,ascending默認值為True,升序排序;排序結果返回一個新DataFrame對象。
例1 小原爸爸負責接小原放學,一段時間內,他爸爸將每天接他時的堵車時間和天氣情況記錄在文件“data.xlsx”中,其中堵車時間的單位為分鐘,如圖 a 所示,并通過 Python 語言編程制作的圖表如圖 b 所示。
(1)通過對圖 b 的分析可知,天氣情況與堵車時間________(單選,填字母:A.有/B.沒有)一定的關系。
(2)部分程序代碼如下,請在劃線處填入合適的代碼。
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
#用來正常顯示中文標簽
df=pd.read_excel(″data.xlsx″) #讀取 Excel 文件中的數據
df=df.groupby(″天氣情況″, as_index = False). ①________  #按“天氣情況”分組求平均數
df=df.sort_values(″ ②________″,ascending= False)
x=③________
y=df[″堵車時間″]
plt.title(″不同天氣情況的平均堵車時間分析″) #設置圖表標題
plt.bar(x, y) #繪制柱形圖
plt.show()
聽課筆記:                                    
                                    
                                    
                                    
變式訓練1 某學校運動會高一年級各個選手得分情況存儲在“運動會得分.xlsx”數據文件中(如圖a所示),現準備利用Python程序對這些數據進行統計分析并可視化,請根據要求回答下列問題(注: 已對重名做技術處理)。
(1)文件“運動會得分.xlsx”中的數據是________________(選填:結構化數據/半結構化數據/非結構化數據)。
(2)編寫如下Python程序,統計各班總分,并建立圖b所示圖表:
import pandas as pd
import matplotlib.pyplot as plt
df=pd.read_excel(″運動會得分.xlsx″)
#統計各班總得分情況,并建立圖表,如圖b所示
df1=df1.sort_values(″班級″,ascending=True)
#按班級升序排列
df1=df.groupby(①________,as_index=False).②________ #統計各班總得分
plt.title(″高一年級各班總分匯總圖″)  #添加圖表標題
plt.bar(df1[″班級″],③__________)
plt.show()
#輸出本年級最具價值運動員,最具價值運動員是本年級中得分最高的運動員,圖c所示
df3=df.groupby(″姓名″,as_index=False).得分.sum()
maxdf=df3.得分.max()
print(″最具價值運動員:″)
print(④__________)
例2 2023 年女足世界杯小組賽晉級規則為:32 支參賽隊伍通過抽簽分為八個小組,每個小組分別有四支球隊進行比賽,勝平負分別積 3 分、1 分、0 分。每個小組積分的前兩名球隊晉級,積分相同的凈勝球多的球隊晉級,凈勝球相同的進球數多的球隊晉級。小組賽數據存放在“女足世界杯小組賽積分.xlsx”文件中,如圖 a 所示。
現用 Python 程序對表中數據進行處理,得到 16 支晉級球隊名單,并輸出如圖 b 所示的圖表。
(1)定義 tj 函數,功能為:使用 Pandas 讀取文件數據,計算每支球隊的積分,并返回一個 Dataframe 對象。實現相應功能的 Python 函數代碼如下,劃線處應填入的代碼為________。
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
#顯示中文
def tj(filename): #filename 為 excel 文件名稱
 df=pd.read_excel(filename)
 for i in df.index:
   df.at[i,″積分″]=________
 return df
(2)定義jsq函數,將Dataframe對象df中的“進失比”列(如數據″8比1″,8為進球數,1為失球數,凈勝球數為7)求出各球隊的凈勝球、進球數。劃線處應填入的代碼為________。
def jsq(df):
  for i in df.index:
    a,b=map(int,df.at[i,″進失比″].split(″比″)) #8比1,則a=8,b=1
    ______________
    df.at[i,″進球數″]=a
  return df 
(3)為了求出八個小組中晉級名單,按照小組A~H、積分由高到低的順序,繪制圖表如圖b所示。實現相應功能的代碼如下:
filename=″女足世界杯小組賽積分.xlsx″
df=tj(filename)
df=①__________
#以“小組”為主要關鍵字升序,“積分”“凈勝球”“進球數”為次要關鍵字降序排列
df=df.sort_values([″小組″,'積分', ″凈勝球″ ,'進球'],ascending=[②________ ,False,False,False]) #按小組分組并取出每組前 2 隊數據
df1=df.groupby(③________,as_index=False).head(2)
plt.bar(④________) #繪制如圖 b 所示圖表
plt.title('2023 女足世界杯 16 強球隊')
#設置圖表格式,代碼略
plt.show()
聽課筆記:                                    
                                    
                                    
                                    
變式訓練2 張三同學收集了一個地區 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 所示,請在劃線處填入合適的代碼。
import pandas as pd
import matplotlib.pyplot as plt
df=pd.read_excel(″shared_bikes.xlsx″)
bike=[ ″哈羅單車″,″摩拜單車″,″美團單車″,″青桔單車″]
sm=[0] * 4
avg=[0] * 4
days=31
for i in ①________:
  t=cal(df.at[i, ″結束時間″]) - cal(df.at[i,″開始時間″])
  for j in range(len(bike)):
    if df.at[i, ″App 類型″]==bike[j]:
      ②________
      break
for i in range(len(bike)):
  avg[i]=sm[i]/days
plt.figure(figsize=(12,4))
x=bike
y=③__________
plt.bar(x,y)
plt.show()
(3)統計本月各類型單車的騎行次數,下列加框處代碼有錯,可以改正為________ (選填字母:(A.max()/B.min()/C.mean()/D.count())。
n=df.groupby(″App 類型″,as_index=True).用戶編號.
例3 小紅收集了部分城市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 pd
def 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]*12
mdays=[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月平均濃度超過年平均濃度的月份共________個。
聽課筆記:                                    
                                    
                                    
                                    
變式訓練3 小林收集了各地市各年份檢測的 PM2.5 濃度值保存于 Excel 文件“PM2.5.xlsx”中,部分數據如圖 a 所示。小林使用Python 進行數據分析,請回答以下問題。
(1)小林先將同一個地區的數據輸出到各自獨立的 Excel 文件中,部分結果如圖 b 所示,實現程序如下所示:
import pandas as pd
import matplotlib.pyplot as plt
df=pd.read_excel(″PM2.5.xlsx″)
#cities 保存所有地區名稱,這里僅演示部分數據
cities=[″安吉縣″, ″淳安縣″, ″慈溪市″, ″杭州市″, ″湖州市″]
for city in cities:
  dfc=________
  dfc.to_excel(city + ″.xlsx″, index=False) # 輸出文件結果示例如圖 b
所示
那么劃線部分語句可以是________(注:全部選對的得 2 分,選對但不全的得 1 分,不選或有選錯的得 0 分)
A.df[df[″地區名稱″]==city]
B.df[df[″地區名稱″]]==city
C.df[df.地區名稱==city]
D.df[df.″地區名稱″]]==city
(2)對于圖 a 所示的原始數據,小林要進行數據整理:刪除“地區編碼”、“指標名稱”、“計量單位”等對后面統計無用的數據列,請將劃線處②的語句補充完整。
df=pd.read_excel(″PM2.5.xlsx″)
#刪除“地區編碼”、“指標名稱”、“計量單位”數據列
df=df.drop([″指標名稱″, ″地區編碼″, ″計量單位″], axis= ①____ )  #同一個地市取 PM2.5 濃度最高的值
dfg =②________
#按 PM2.5 的值升序排序
dfg=dfg.sort_values(″PM2.5″, ascending=True)#輸出排序后的最后五行結果
print(dfg.tail())
(3)對于整理后的數據,在同一個地市中取歷次 PM2.5 濃度檢測值最高的值,最后按 PM2.5 升序排序數據,輸出結果如圖c 所示,則第②空應填寫的語句是________。(單選,填字母)
A.df.groupby(″PM2.5″).max()
B.df.groupby.地區名稱.max()
C.df.sort_values(″PM2.5″).max()
D.df.groupby(″地區名稱″).max()
(4)將排序后的數據分別取 PM2.5 檢測值最高和最低的五行數據合并成新的 DataFrame 對象后繪制成柱形圖如圖d 所示。請將程序補充完整。
df2=pd.concat([dfg.head(5), dfg.tail(5)]) #合并兩個對象成為新的DataFrame
對象
plt.rcParams['font.sans-serif']=['KaiTi','SimHei','FangSong'] #設置圖表字體
plt.figure(figsize=(8,4))
plt.title(″部分縣市 PM2.5 濃度對比″)
plt.xlabel(″PM2.5 濃度值″)
plt.bar(①________ , df2[″PM2.5″],color=″orange″)
for i in range(len(df2)):
  x=df2.index[i]
  y=②________
#text()方法可以繪制數據標簽,語法:text(橫坐標,縱坐標,顯示內容)
plt.text(x, y, '%d' % y)
1.近期學校進行了一次技術學考模擬考試,教師將各班級的部分同學數據錄入了“考試成績.xlsx”文件中(如圖a 所示),為了根據學生成績評定等級,教師特地編寫了一個 Python 程序。
(1)觀察圖 a,下列關于“考試成績.xlsx”中數據存在的問題以及對應的解決方式中,正確的是________。(多選題,多選,錯選均不得分,漏選得 1 分)
A.數據重復應在進一步審核的基礎上進行合并或刪除等處理
B.數據缺失將上一條數據記錄中的數據復制
C.格式不統一進行數據轉換,形成統一格式
D.邏輯錯誤再次訪問數據源,驗證數據是否正確
(2)在解決數據問題后,進行進一步數據處理,要求如下:
a.按照等級評定規則,若學生成績大于等于 85 分,則等級為優秀,否則等級為合格;
b.統計各班級的優秀人數,生成柱形圖(如圖 b 所示)。現編寫程序如下,請在劃線處填入合適的代碼:
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] 
#繪圖時正常顯示中文標簽
plt.rcParams['axes.unicode_minus']=False #繪圖時使用 Unicode 字符
df=pd.read_excel('考試成績.xlsx')
for i in range(len(df)):
  if ①________:
    df.at[i, ″等級″]=″優秀″
  else:
    df.at[i, ″等級″]=″合格″
df=②________  #篩選出等級為優秀的學生
g=df.groupby(″班級″, as_index=True).count()
plt.title(″各班級優秀人數″)
plt.③________ #顯示圖例
plt.show()
(3)若要生成如圖 b 所示的圖表,加框處的代碼應為下列選項中的________。(填字母)
A.plt.bar(x,y,label=″優秀人數″)
B.plt.bar(g.班級,g.等級,label=″優秀人數″)
C.plt.bar(g.index,g.等級,label=″優秀人數″)
D.plt.bar(df.index,df.等級,label=″優秀人數″)
2.為了完善某學校食堂管理、持續提高食堂服務質量,讓全校師生更加精神飽滿地開展工作、學習,對學校食堂進行了一些調查,調查項目共 5 項(具體內容略)。學校后勤管理謝老師收集了 12 個班級的調查結果,分別存儲在“dy01.csv”、“dy02.csv”、... 、“dy12.csv”等 12 個文件中(如圖 a 所示),每個文件部分界面如圖 b 所示。
現需要分析 12 個班級學生對這 5 個問題的選“A”情況。謝老師用 Python 的 pandas模塊編寫了以下代碼,實現相關問題的解決。請回答下列問題。
(1)定義了 fun_A()函數實現了統計某個班級 5 個問題的選“A”的人數情況。Python程序代碼如下,請在劃線處填入合適代碼。
import pandas as pd
def fun_A(file):
  df=pd.read_csv(file)
  A_list=[]
  for i in df.columns[1:]:
    j=c=0
    while j      if ________ :
        c+=1
        j+=1
   A_list.append(c)
 return A_list
(2)調用上述函數,處理 12 個班級每個問題的選“A”的總人數,Python 程序代碼如下,請在劃線處填入合適代碼。
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 #每個問題選 A 的人數
  for j in range(12):
    ②________
  y[i]=s
(3)經上述處理后,接著以圖的形式匯報結果(如圖 c 所示),Python 程序代碼如下,請回答下列問題。
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
#圖表顯示中文字體
plt.title(″每個問題選 A 的總人數″)
__________
plt.legend()
plt.show()
劃線處代碼合適的是________。(單選,填字母)
A.plt.bar(x,y)
B.plt.bar(x,y,label='A 選項')
C.plt.plot(x,y)
D.plt.plot(x,y,label='A 選項')
(4)調查數據的有效問卷共 550 份,從圖 c 中可以觀察出有________(填數字)個問題的選“A”總人數低于 60%。
3.小王收集了 2022 年城市 A 全年每天的部分天氣數據,保存在“2022 天氣.xls”文件中,部分數據如圖a 所示。
(1)為統計 2022 年全年晴、陰、雨……的天數,編寫了如下的 Python 程序:
import pandas as pd
import matplotlib.pyplot as plt
df=pd.read_excel('2022 天氣.xls')
g=____________
print('2022 年城市 A 天氣情況統計如下:')
for x in g.index:
  print(x+':' +str(g[x])+'天')
程序運行結果如圖 b 所示,則劃線處應該填入的代碼為________。(單選,填字母)
A.df.groupby('天氣情況')['日期'].sum()
B.df.groupby('天氣情況')['日期'].count()
C.df.groupby('天氣情況').mean()
D.df.groupby('天氣情況').count()
(2)統計 2022 年城市 A 每月平均氣溫并繪制線形圖,部分 Python 程序如下,請在劃線處填入合適的代碼。
s=[0]*12
avg=[0]*12 #存儲每月平均氣溫
mdays=[0]*12
x=[1,2,3,4,5,6,7,8,9,10,11,12]
df['平均溫度']=(df['最低溫度']+df['最高溫度'])/2
for i in range(365):
  ①________
  s[int(month)-1]+=df.at[i,'平均溫度']
  mdays[int(month)-1]+=1
for i in range(12):
  avg[i]=round(②________,1)
y=③________
plt.plot(x,y) #繪制線形圖
#設置繪圖參數,顯示如圖c 所示線形圖,代碼略。
(3)由圖 c 可知,2022 年城市A 最冷和最熱的月份分別是________。
4.小明為了研究某地近十年每月的溫差變化,編寫Python程序。以2023年4月為例,該月每天的溫度數據分別保存在以8位日期字符串命名的excel文件中,部分文件如圖a所示,每個文件記錄了一天24小時的溫度數據,如圖b記錄了4月28日的數據。
(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所示,請在劃線處填入代碼。
def 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))
5.某網站服務器五月(31 天)的后臺訪問記錄保存在 log.xlsx 文件中,如圖a所示:
請回答下列問題:
(1)定義 oneday 函數,功能為:讀取日期為 day 的訪問記錄,將訪問地區依次保存在列表 city 中,并返回該列表。函數代碼如下:
import pandas as pd
df=pd.read_excel('log.xlsx')
def oneday(day):
  city=[]
  for i in ____________:
  if df.at[i,″時間戳″][0:2] == day:
    city.append(df.at[i,″地區″])
  return city
劃線處代碼為:__________(單選:A.df.index()/B.df.index/C.df.values()/ D.df.values)。
(2)統計該月每天華東五市的訪問數據,并繪制線型圖,部分 Python 程序如下,請在劃線處填寫合適的代碼。
import matplotlib.pyplot as plt
eastcity = [″上海″,″南京″,″杭州″,″蘇州″,″無錫″]
x=[i for i in range(1,32)]
y=[]
t=0
for i in range(1,32):
  ①________
  if i < 10:
    day=″0″ + day
   city=oneday(day)
   for j in city:
     if j in eastcity:
      ②________
     y.append(t)
     t=0
plt.plot(③________)
plt.show()
(3)由圖b可知,該網站本月訪問量低于 4 萬次天數共有__________天。
6.某市中考體測規定,考生要在 6 個體育項目中選 3 個進行測試,少選或多選的同學不符合報名要求。全市 1 萬多名考生的報名結果(1 表示選擇該項目)保存在文件“tycs.csv”中,如圖 a 所示。請回答下列問題:
(1)下列有關數據處理的說法正確的是________。(多選,填字母)
A.在對數據進行處理前要進行數據整理,解決數據缺失、數據異常、邏輯錯誤等問題
B.編程處理數據能提高數據分析和挖掘的效率,目前只能采用 Python 語言實現
C.文本數據處理一般過程包括分詞、特征提取、數據分析、結果呈現
D.需要將某個整體中各部分的大小和比例進行可視化展示時,可采用餅圖、環形圖等
E.可使用公式“=SUM(D5,I5)”對 Excel 中第 5 行D 列至I 列中的數據進行求和
(2)定義函數 filter_data 功能為:讀取某市報名的 csv 文件,返回該市所有報名符合要求(在6 個體育項目中選擇3 個)的學生信息。函數代碼如下,劃線處應填入的代碼為__________。
import pandas as pd
def filter_data(datafile):
  df=pd.read_csv(datafile) #讀取文件 datafile 中的數據
  df['合計']=df.count(axis=1) - 3
# count 函數統計每行中非空數據的個數
  df1=____________________
  return df1
(3)統計該市每個組合報名的人數并繪制柱形圖,如圖b 所示,其中各體育項目名稱用相應字母(A~F)代替。部分 Python 程序如下,請在劃線處填寫合適的代碼。
import matplotlib.pyplot as plt
df=filter_data('tycs.csv')
d={'A': '800 米跑', 'B': '跳繩', 'C': '游泳', 'D': '引體向上', 'E': '擲實心球', 'F': '立定跳遠'}
result = {}
for i in df.index:
  ①________
  for key in d:
    t=df.at[i, d[key]]
    if t==1:
      choice += key
  if choice in result:
    ②________
  else:
    result[choice] = 1
x=result.keys() #獲取字典 result 的鍵
y=result.values() #獲取字典 result 的值
plt.bar(x, y) #繪制柱形圖
# 設置繪圖參數,顯示如圖 b 所示柱形型圖,代碼略
(4)由圖b 可知,報名人數最多的組合為__________________________(填寫體育項目的名稱)。(共70張PPT)
課時3 利用Pandas模塊處理數據
第四章 數據處理與應用
1.小明收集了某超市部分商品 2022 年上半年每天的價格數據并保存在 "data.xlsx“
文件中,如圖 a 所示。
要分析某商品一個月內的價格穩定情況,需要將本月每天(除第一天外)價格波動的絕對值加起來(價格波動=當天價格-前一天價格),其值越小,價格越穩定。
為統計該超市 6 月份各商品價格穩定情況,編寫如下 Python 程序。請回答下列問題:
(1)獲取 6 月份各商品的價格,劃線處填入的代碼為    。(多選,填字母)
A.df[df["日期"] >=20220601]
B.df["日期" >=20220601]
C.df[df.日期 >=20220601]
D.df[df["日期"]] >=20220601
import pandas as pd
df=pd.read_excel("data.xlsx")
df=           
df=df.reset_index(drop=True) #重新設置索引,從 0 開始遞增
(2)繪制6月份價格穩定情況線形圖,部分Python程序如下,請在劃線處填入合適代碼。
import matplotlib.pyplot as plt
cols=df.columns[1:] #存儲各商品名稱
n=①   
m=len(cols)
diff=[0]*m
for i in range(m):
  s=0
  for j in range(1, n):
    day_diff=abs(df[cols[i]][j]-df[cols[i]][j-1]) #計算每天價格波動
    s+=day_diff
  ②   
x,y=cols,diff
plt.plot(③    )
plt.show()
(3)由圖 b 可知,該超市 6 月份各商品價格最穩定的是    。(單選,填字母)
A.商品 A B.商品 B
C.商品 C D.商品D
E.商品 E
答案 (1)AC (2)①len(df) ②diff[i] = s ③x,y (3)B
(1)從圖a的skcj.xlsx文件,可提取出每位選考技術同學的技術成績,在劃線處填寫相關代碼。
import pandas as pd
df=pd.read_excel("skcj.xlsx")
df['技術賦分']=0 #增加一列用來存放技術成績
for i in range(len(df)):
  for j in range(1,4):
    if df.at[i, '科目' + str(j)] == '技術':
      df.at[i, '技術賦分']=   
      break
(2)因表彰需要,降序顯示成績前 n 名的同學,由于可能出現同分,實際顯示人數可以超過 n,顯示結果如圖b。
n=5#設定表彰人數 n
df=df.sort_values(①    )
index=df.index[n - 1]
score=df.at[index, '技術賦分'] #求出表彰的最低分數線
df2=②    
print(df2[['姓名','技術賦分']])
(3)編寫代碼繪制如圖 c 所示圖表,其中有①     個班優生(>=85分)人數超過 10 人,為實現該功能,下面劃線處的代碼應選擇②     。(多選:填字母)
A.plt.bar(g.班級, g.技術賦分)
B.plt.bar(g['班級'], g['姓名'])
C.plt.bar(g.index, g.技術賦分)
D.plt.bar(g.index, g['姓名'])
#找出df中技術優生(>=85分),并另存為 df1(代碼省略)
g=df1.groupby('班級').count()
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
plt.title('技術優生人數統計')
        #多選題
plt.show()
答案 (1)df.at[i, "科目"+str(j)+ "賦分"]或df["科目"+str(j)+"賦分"][i] 
(2)①"技術賦分",ascending= False ②df[df.技術賦分>=score]或
df[df["技術賦分"]>=score] (3)①2 ②CD
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 pd
xb=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 plt
plt.rcParams [ 'font.sans-serif']=[ 'SimHei']
#圖表顯示中文字體
plt.title(xb +"生取名常用字")
plt.bar(df3.字,      )
plt.show()
(4)由圖c可知,全校女生名字中出現過30次以上的字有    (填數字)個。
答案 (1)①df.at[i,"性別"]==xb或df["性別"][i]==xb 或df.性別[i]==xb ②mz (2)D
(3)df3.個數或 df3["個數"] (4)6
解析 本題考查利用Pandas進行數據統計。(1)①找出同性別學生中的每個字,因此索引i的學生性別與函數參數xb相同。②將所有的字存儲在列表mz并返回。(2)字典存儲姓名中的字,利用該字典創建一個包含"字"和"個數"兩列的DataFrame對象,并按字進行分組統計,字是分組的標準,統計的結果在個數列,統計出現最頻繁的10個字,需對個數列降序排序。(3)每個字的數量保存在個數列中。(4)略。
4.收集某地2022年全年的天氣數據,按日期順序儲存在“tqqk.xlsx”文件中,部分界面如圖a所示。
為計算每月空氣質量為優的日期中的平均溫差。編寫Python程序,請回答下列問題:
(1)計算并篩選出空氣質量為優的記錄信息,Python程序段如下,請在劃線處應填入合適的代碼。
import pandas as pd
df=pd.read_excel("tqqk.xlsx")
df["溫差"]=df["最高溫度"]-df["最低溫度"]
dfy=        
dfy=dfy.sort_values("日期",ignore_index=True)
(2)計算滿足條件的日期中的平均溫差。并繪制線形圖,部分Python程序段如下,請在劃線處填入合適的代碼。
import matplotlib.pyplot as plt
i=0
avewc=[] #月平均溫差
while i  j=i+1
  tot=dfy.at[i,"溫差"]
  while j<=len(dfy)-1 and dfy.at[i,"日期"][5:7]==dfy.at[j,"日期"][5:7]:
    ①   
    j+=1
  avewc.append(round(tot/(j-i),2))
  ②   
x=['1月','2月','3月','4月','5月','6月','7月','8月','9月','10月','11月','12月']
y=③   
plt.plot(x,y,label="月平均溫差")
#設置繪圖參數,顯示如圖b所示線型圖,代碼略
(3)由圖b可知,月平均溫差超過8的月份共有    個。
答案 (1)df[df.空氣質量=='優'] (2)①tot+=dfy.at[j,"溫差"] ②i=j ③avewc (3)6
5.為了解學生在食堂和校園超市的消費情況,學校把 9 月 1-4 日各個窗口的消費數據導出并保存在“eat. xlsx”文件中,數據格式如圖a所示。如圖b所示,1-14 號窗口為食堂一樓,15-28 號是食堂二樓,29-34號是校園超市。
用Python讀取該文件并作數據分析后輸出如圖c所示結果,請回答下列問題。
(1)讀入數據后,需要將數據集 df 中的數據按窗口號設置相應的位置信息:
#引用 pandas 及 matplotlib,并設置參數,代碼略
df=pd.read_excel('eat.xlsx')
df['位置']=''  #增加'位置'列,初始值為空
for i in ①    :
  if df['窗口'][i] <=14:
    df['位置'][i]='食堂一樓'
  elif ②    :
    df['位置'][i]='食堂二樓'
  else:
    df['位置'][i]='校內超市'
劃線①處應填寫代碼:      (單選,填寫字母:A. df.index /B. df.columns /
C. df.values);劃線②處應填寫代碼:      。
(2)完成窗口號設置后,統計各個位置的金額總和,代碼如下:
a=['校內超市','食堂一樓','食堂二樓']
b=[0,0,0] #存儲各個位置的消費總金額
for x in df.values:
  for i in range(3):
    if x[5] == a[i]:
     ①   
plt.bar(②    ) #輸出如圖c所示圖表
plt.show()
劃線①處代碼為:    ,劃線②處代碼為:    。
(3)觀察圖c可知,消費總金額最多的位置是    。(單選,填字母)
A.校內超市 B. 食堂一樓 C. 食堂二樓
答案 (1)①A ②df['窗口'][i] <=28 (2)①b[i] +=x[3] 或 b[i]=b[i]+x[3] ②a,b (3)C
解析 (1)①變量i表示df的行索引。②15-28表示食堂二樓,因此在不滿足第一條件情況下,只要小于等于28即可。(2)①變量x表示df.values一行數據,其中x[3] 消費金額,x[5]表示消費位置。對相應的樓層消費金額進行累加。②圖表的橫軸為消費樓層,縱軸為各樓層消費金額。(3)略。
6.小陳在氣象部門得到了一份2022年不同城市的月平均日照時數(單位:kW·h/
m2/day)數據,存放在Excel文件“日照.xlsx”中。部分界面如圖a所示。
請回答下列問題:
(1)第1步,小陳編寫了如下代碼。
import pandas as pd
df=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]
  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平方米的光伏發電板共①    塊。
(日均發電量=電池板的容量/塊×塊數×平均日照時數×充放電效率)
建設光伏發電設備前要先獲得當地的平均日照時數情況,小陳通過如下代碼獲取相關數據。
res=df[df["城市名"]=="溫州市"]
res=res.values[0][1:13].②   
print("溫州市月平均日照最小值為”,res)
答案 (1)計算每個城市的年度平均日照時數 (2)C (3)①52 ②min()
7.某單位正式員工的基本工資計算公式為:基本工資=崗位工資+薪級工資,如圖a和圖b,分別對應salary1.xlsx文件和salary2.xlsx文件。員工入職單位一年后轉正,定崗位等級為十三級,根據學歷定起始的薪級,中專2級、大專5級、本科7級、碩士11級、博士14級。轉正定級后,薪級每年增加一級。
為統計分析該單位員工的工資情況,編寫Python程序。請回答下列問題:
(1)定義崗位工資和薪級工資標準查詢的兩個函數。
gwgz函數功能為:讀取salary1.xlsx文件,根據崗位等級m,返回對應的工資標準,例如m=“十三級”,gwgz(m)=1585。函數代碼如下,劃線處應填入的代碼為    。(單選,填字母)
A.df1.'崗位等級'[i]==m
B.df1[崗位等級][i]==m
C.df1['崗位等級'][i]==m
D.df1[i]['崗位等級']==m
import pandas as pd  
def gwgz(m):
  df1=pd.read_excel('salary1.xlsx')
  for i in df1.index:
    if    :
      return df1.at[i, '工資標準']
xjgz函數功能為:根據薪級等級n,返回對應的工資標準,例如n=10,xjgz(n)=661,代碼略。
(2)現有員工信息表info.xlsx,所有員工都已經過了實習期,如圖c。統計各學歷的人數和基本工資的平均值,編寫Python程序。請回答下列問題:
import datetime
dic={'中專':2,'大專':5,'本科':7,'碩士':11,'博士':14}
time=datetime.date.today() #獲得當前的年月日
now_year=time.year #獲取年份
now_month=time.month #獲取月份
df=pd.read_excel('info.xlsx')
for i in df.index:  
  station=df.at[i, '崗位等級']
  past_year=int(df.at[i, '入職年月'][:4])
  past_month=int(df.at[i, '入職年月'][5:])
  if now_month >=past_month:
    grade=now_year-past_year-1
  else:
    grade=now_year-past_year-2
  grade +=①   
  df.at[i, '基本工資'] =②     #計算員工的基本工資
#對各學歷的員工計算平均基本工資和統計人數
df1=df.groupby('學歷',as_index=False).agg({'基本工資':'mean','姓名':'count'}) #修改列名
df2=df1.rename(columns={'基本工資': '平均工資', "姓名": "人數"}) #圖表對象初始化,代碼略
ax1.bar(df2.學歷, df2.平均工資, label="平均工資") #繪制柱形圖
ax2.plot(df2.學歷,③    , label="人數")
#繪制線形圖
fig.legend()
plt.show()
(3)目前該單位平均工資為3867.33元,由圖d可知,學歷為    的員工,他們的平均工資與公司平均工資相差最大。
答案 (1)C (2)①dic[df.at[i,'學歷']] ②gwgz(station)+xjgz(grade) ③df2.人數 (3)博士
解析 本題考查Pandas數據處理。(1)根據崗位等級m,返回對應的工資標準。(2)①grade表示工作年限,其值為參加工作時間加上學歷時間(讀大學的年數)。②計算員工的基本工資,基本工資=崗位工資+薪級工資 。③線性圖的縱軸為人數。(3)略。
8.小紅從網上下載收集了浙江省部分海島2022年10月-12月的天氣預報信息,存儲在Excel文件中,包含預報時間、站點編號、浪高、溫度、風向以及風速,如圖a所示,海浪等級信息如圖b所示,她要編寫一個Python程序快速對海島天氣數據進行分析。
浪高值 風浪等級
0 無浪
1-10 微浪
10-25 小浪
25-100 中浪
>100 大浪
圖b
(1)為了獲取該數據集中預報信息最多的海島站點編號及該島某月各風浪等級的預報次數,小紅需要對圖a所示的表中數據進行整理,下列說法正確的是    。(多選,填字母)
A.第4行和第5行數據重復,刪除其中一行即可
B.通過檢測發現D7單元格的數據存在錯誤,應進行修正
C.刪除“風向”和“風速”兩列數據,不影響分析結果
D.“浪高”為0的數據沒有任何價值,可以直接刪除
(2)小紅利用整理好的數據,編寫并運行程序,求出預報信息最多的海島站點編號并根據給定月份,分析該月的數據并可視化,可視化結果如圖c所示,請在劃線處填入合適的代碼。
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['KaiTi','SimHei','FangSong'] #設置中文字體顯示
df=pd.read_excel("浙江省海島預報信息.xls")
def zhengli():  #整理數據
  df["風浪等級"]="無浪"
  for i in df.index:
    t=df["浪高"][i]
    if t>100:
      df["風浪等級"][i]="大浪"
    elif t>25:
      df["風浪等級"][i]="中浪"
    elif t>10:
      df["風浪等級"][i]="小浪"
    ①    :
      df["風浪等級"][i]="微浪"
for i in df. index: #截取"預報時間"列中的月份日期信息,添加到"月份"列和"日期"列
  df.at[i,"月份"]=str(df.at[i,"預報時間"])[5:7]
  df.at[i,"日期"]=str(df.at[i,"預報時間"])[8:10]
zhengli()
df1=df.groupby(②    , as_index=False).count()
df1_sort=df1.sort_values("預報時間" , ascending=False,ignore_index=True)
top=df1_sort["站點編號"][0]
print("預報信息最多的海島站點編號是:", top)
df2=df[df.站點編號==top]
m=input("請輸入要查詢的月份:")
df3=③   
df3=df3.groupby("風浪等級").預報時間.count()
x=df3.index
y=df3.values
plt.plot(x,y)
#設置繪圖參數,繪制如圖c所示線形圖,代碼略。
(3)觀察圖c圖表可知,該海島12月出現天數最多的風浪等級為    。
答案 (1)BC (2)①elif t>=1或elif t>0 
②"站點編號" ③df2[df2.月份==m] (3)微浪
9.小明收集了某學校某次模考技術成績的數據,存儲在文件“cj.xlsx”中,其中“xx1”表示信息選擇題1,共12個選擇題。每小題的分值是2分,如圖a所示。
各班吻合度偏差較大人數統計如下:
1班3人
2班7人
3班7人
4班11人
5班5人
圖b
(1)從圖a中第一行數據看,該行數據存在的問題是    。(單選,填字母)
A.數據缺失 B.邏輯錯誤
C.格式不一致 D.數據異常
(2)技術學科包含信息技術與通用技術,需要我們關注學科的平衡,而衡量學科平衡的重要指標是學科吻合度,采用得分差來判斷(3分一級:0~2分為0級偏差,3~5分為1級偏差,以此類推),現需要編寫Python程序計算吻合度偏差值,并統計各班偏差較大的人數(吻合度>=3),輸出結果如圖b所示。代碼如下,請在劃線處填入合適的代碼。
import pandas as pd
plt.rcParams["font.sans-serif"]=["SimHei"]
df=pd.read_excel("cj.xlsx")
df=df[df.技術!=0]
n=len(df)
info=[]
bjc={1:0,2:0,3:0,4:0,5:0} #存儲各班吻合度>=3的人數
for i in range(n):
  info.append([df.班級[i],df.姓名[i],df.信息[i],df.通用[i]])
  diff=info[i][2]-info[i][3]
  info[i].append( ①     )
  print(info[i][0],"班",info[i][1],"吻合度級別:",info[i][4])
  if info[i][4]>=3:
    ②    
print("各班吻合度偏差較大人數統計如下:")
for bj in bjc:
  print(bj,"班",bjc[bj],"人")
(3)想知道12個信息技術選擇題的難度系數(難度系數=平均分/分值),選出錯誤率最高的5個小題。小明編寫程序如下,求各題的難度系數并給錯誤率最高的5個小題繪制了如圖c所示的柱形圖。
import matplotlib.pyplot as plt
dif=[]
for i in df.columns[5:]:
  dif.append(round( ①     /2,2))
dic={"題號":df.columns[5:],"難度系數":dif}
df1=pd.DataFrame(dic)
df1=df1.sort_values("難度系數")
plt.figure(figsize=(8,4))
plt.title("信息難度最大的5道題對比圖")
plt.bar(②     )
plt.xlabel("題號")
plt.ylabel("難度系數")
plt.show()
答案 (1)B (2)①abs(diff)∥3 ②bjc[info[i][0]]+=1 (3)①df[i].mean() 
②df1.題號[0:5], df1.難度系數[0:5]
解析 (1)數據存在的問題主要有數據缺失、數據重復、數據異常、邏輯錯誤、格式不一致等。選擇題每題的分值為2屬于邏輯錯誤。(2) ①計算得分差來判斷。3分一級:0~2分為0級偏差,3~5分為1級偏差,以此類推。②統計吻合度。info[i][0]存儲為班級,字典bjc存儲各班的吻合度,依次遍歷每位同學的數據,若吻合度>=3,相應班級計數加1。(3)①計算各題平均分。表達式i in df.columns[5:],i為列標簽,難度系數=平均分/分值,統計該列的平均分為df[i].mean()。②制作圖表數據源,兩列數據為題號和難度系數,有題意可知取前5,所以此空為df1.題號[0:5], df1.難度系數[0:5]。
10.學校暑期開展“青春迎亞運”活動,邀請高二學生每日參加運動鍛煉并進行線上打卡。每周收集一次相關數據,分別保存在相應的xlsx文件中,部分文件如圖a所示;每個文件記錄了一周7天的打卡數據,示例如圖b所示,其中運動時長單位:分鐘。
為統計分析學生鍛煉情況,給出周報數據,編寫Python程序,請回答以下問題:
(1)定義px函數,功能為:讀取某一周的打卡數據,將其按班級進行排序操作并返回結果。函數代碼如下,將劃線處代碼補充完整。
import pandas as pd
def 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 plt
s=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=0
while 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所示,由圖可知,該周參與人氣最高的
運動項目為       。
答案 (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)略。
11.小明通過調查問卷收集了食堂滿意度情況數據,保存在“data.csv”文件中,如圖a所示。
為統計分析每個調查項目不同選項的人數及不滿意率,編寫Python程序。請回答下列問題:
(1)統計每一項調查內容的總票數、滿意、一般及不滿意人數,程序運行結果如圖b所示,請在劃線處填入合適的代碼。
import pandas as pd #導入 pandas 模塊
import matplotlib. pyplot as plt #導入 pyplot 模塊
plt. rcParams["font. sans-serif"]=["SimHei"]  #設置圖表顯示中文字體
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所示,請在劃線處填入合適的代碼。
df2["不滿意率(%)"]=①   
x=②   
y=df2["不滿意率(%)"]
plt.figure(figsize=(8,4))
pl.title("食堂調查問卷不滿意率(%)情況")
plt.bar(x,y,label="不滿意率(%) ")
plt.legend()
答案 (1)①colname ②dfc.at[j,"序號”]或dfc["序號”][j]或dfc.序號[j] (2)①df2
["不滿意"]/df2["總票數"]*100或df2["不滿意"]/po1l*100或df2.不滿意/df2.總票數*100或df2.不滿意/pol1*100或其它等價答案 ②df2["調查項目"]或df2.調查項目
12.小王收集了所在學校高三年級一周預定套餐數據,保存在“yzte.xlsx” 文件中,部分數據如圖a所示。編寫Pyhon程序,分析高三各班一周各套餐預定情況,確定各班“班級最喜愛的套餐”和“校一周預定套餐之王”。
(1)讀取 EXCEL文件“yzte.xlsx”中的數據,統計高三各班套餐一周的預定量,輸出統計結果,格式如圖b 所示。下列劃線部分應依次填寫       。(單選,填字母)
A.groupby('班級')[columns].sum()
B.groupby('班級',as_index=False).sum()
C.groupby('班級')[columns].count()
D.groupby('班級',as_index=False).count()
import pandas as pd
df=pd.read_excel(' yzte.xlsx')
columns = df.columns[3:]
df=df.        
print(df)
(2)每班一周套餐預定量最多的套餐為本班“班級最受歡迎的套餐”,統計每種套餐被各班列為“班級最受歡迎”的班級數量。請為下面劃線部分填寫合適代碼。
df["班級套餐之最"] = df.max(axis=1)
result ={};count ={}
for index in df.index :
  for column in columns:
    if df["班級套餐之最"][index]==①         :
      if column in result :
        result[column].append(index)
        count[column] += 1
      else:
        result[column] =②   
        count[column]=1
df1=pd.Series(count)
(3)根據第(2)小題的統計結果,繪制如圖c所示圖表,由圖可知,“校一周預定套餐之王”為①   
下列是部分繪圖代碼,請在劃線處填寫合適代碼。
import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"]=["song Ti"]
plt.title("一周預定套餐之王判定圖")
plt.bar(count.keys(),②    )
plt.show()
答案 (1)A (2)①df[column][index]
②[index] (3)①套餐A ②count.values

展開更多......

收起↑

資源列表

<pre id="tfb94"><li id="tfb94"></li></pre>

<bdo id="tfb94"><rt id="tfb94"></rt></bdo>
  • <menu id="tfb94"><dl id="tfb94"></dl></menu><i id="tfb94"><acronym id="tfb94"><sub id="tfb94"></sub></acronym></i>

    1. 主站蜘蛛池模板: 肥东县| 武鸣县| 咸宁市| 六盘水市| 武宁县| 高唐县| 黔东| 涡阳县| 尼玛县| 手游| 建始县| 邻水| 堆龙德庆县| 遂溪县| 饶平县| 西和县| 马边| 澄城县| 昆明市| 泰和县| 嵊泗县| 新营市| 湟源县| 咸阳市| 铁力市| 安平县| 资源县| 柳河县| 昌宁县| 鸡东县| 图木舒克市| 靖远县| 广水市| 东丽区| 县级市| 海原县| 尚义县| 呼和浩特市| 长宁县| 陆良县| 三门峡市|