提取碼:8828(本文用到的資料檔案)
import numpy as np import pandas as pd from pandas import Series,DataFrame import matplotlib.pyplot as plt import seaborn as sns # 讓圖形在控制台列印出來 %matplotlib inline
boy = pd.read_excel('18級高一體測成績彙總.xls')
- boy
#header=[0,1] 把第一行 和第二行 作為 一級 二級索引 score = pd.read_excel('體測成績評分表.xls',header=[0,1])
boy.info()
# 去掉班級的一列 temp = boy.loc[boy['班級']!='班級'] #去完重複 顯示有多少個班級 temp['班級'].unique()
# inplace=True 直接修改boy裡的 6班為6 boy = boy.loc[boy['班級']!='班級'] #boy.replace(to_replace={"班級":"6班"},value=6,inplace=True) boy.replace(to_replace={"6班":"6"},inplace=True)
boy['班級'].unique()
# 看有沒有空值 # 隻要有一個是空值 boy.isnull().any() # 這些字段是否 全為空值 boy.isnull().all()
# 所有的學科的都沒有參加 設定為缺考 score_columns = ["1000米","50米","跳遠","體前屈","引體","肺活量","身高","體重"] temp = boy[score_columns] # 找到缺考的資料 索引的組合 empty_index = temp.loc[temp.isnull().all(axis=1)].index empty_index
# 分數參考表的肺活量 score['男肺活量']
boy['肺活量']
FHL_df = score['男肺活量'] def boy_FHL(x): #周遊成績表,x 是大于表中哪一個肺活量 for data in FHL_df['成績']: if x>=data: return FHL_df['分數'].loc[FHL_df['成績']==data].values[0] return 0
boy_FHL(3900)
# 利用map映射 将一張分數表,映射到成績表中 ff=boy['肺活量'].map(boy_FHL).values ff
# 利用map映射 将一張分數表,映射到成績表中 boy1 = boy.copy(); boy1['肺活量']=boy['肺活量'].map(boy_FHL) boy1[['姓名','肺活量']]
# 把類型統一浮點類型 # 将集合都轉化為浮點類型 boy['50米'] = boy['50米'].astype(float)
df_50M = score['男50米跑']
# 處理男子50米跑的資料 def map_50(x): for data in df_50M['成績']: if x <= data: return df_50M.loc[df_50M['成績']==data]['分數'].values[0] return 0.0
map_50(10.4)
- 10
# 1000米成績處理 score['男1000'].loc[10,"成績"]
'4\'25"'.strip('"')
"4'25".split("\'")
# 時間轉換的函數 def process_data(x): # 如果x 不是字元串 #如果時間是整數直接傳回 if not isinstance(x,str): return x x = x.strip('"') #得到分鐘 m s秒 m,s = x.split("\'") second = float(s)/(60) #如果不是整數時間,傳回帶小數的分鐘 return (float(m) + second)
process_data("4'21")
- 4.35
# 學生成績表中的1000 米時間替換一下 boy['1000米'] = boy['1000米'].map(process_data) boy['1000米']
score[("男1000","成績")] = score[("男1000","成績")].map(process_data) score
# 處理男子1000米跑的資料 df_1000M = score['男1000'] df_1000M def map_1000(x): for data in df_1000M ['成績']: if x <= data: return df_1000M.loc[df_1000M['成績']==data]['分數'].values[0] return 0.0
boy2 = boy.copy() boy2['1000米'] =boy['1000米'].map(map_1000) boy2
boy['引體']
df_YT = score["男引體"]
df_YT
# 處理男子引體資料 def map_YT(x): for data in df_YT['成績']: if x>data: return df_YT.loc[df_YT['成績']==data]["分數"].values[0] return 0
boy['引體'].map(map_YT)
# 體前屈 boy[["姓名","體前屈"]]
df_TQQ = score["男體前屈"]
#處理提前屈的函數 def map_TQQ(x): for data in df_TQQ['成績']: if x>=data: return df_TQQ.loc[df_TQQ['成績']==data]["分數"].values[0] return 0
boy.loc[boy["體前屈"].map(map_TQQ) == 50]