高中体测数据转换
1、数据加载, pd.read_excel(’./18级高一体测成绩汇总.xls’)默认加载第一个工作表
2、数据加载, pd.read_excel(’./18级高一体测成绩汇总.xls’,sheet_name = 1)指定加载第二个工作表
import numpy as np
import pandas as pd
male = pd.read_excel('D:\WORK\STUDY\数据分析\作业\阶段五/18级高一体测成绩汇总.xls')
female = pd.read_excel('D:\WORK\STUDY\数据分析\作业\阶段五/18级高一体测成绩汇总.xls',sheet_name = 1)
3、评分标准加载,pd.read_excel(’./体侧成绩评分表.xls’,header = [0,1]),header=[0,1]表示多层列索引
rule = pd.read_excel('D:\WORK\STUDY\数据分析\作业\阶段五/体侧成绩评分表.xls',header = [0,1])
4、数据类型转换
男1000米跑,数据类型是str,并且是4’26这种形式,需要变成float类型的值
评分标准中男1000米跑和女800米跑的成绩都是4‘10’‘这种形式,需要转化为float类型值
其他所有数值类型的值,都要转换为float类型的值
male['男1000米跑'] = male['男1000米跑'].str.replace("'",".")
male['男1000米跑'] = pd.to_numeric(male['男1000米跑'], errors='coerce').fillna(0)
male[['男体前屈','男引体','男肺活量','BMI']] = male[['男体前屈','男引体','男肺活量','BMI']].astype(float)
rule = rule.replace("'",".",regex=True)
rule = rule.replace('"',"",regex=True)
rule = rule.astype(float)
female[['女体前屈','女仰卧','女肺活量','BMI']] = female[['女体前屈','女仰卧','女肺活量','BMI']].astype(float)
display(male.dtypes,female.dtypes,rule.dtypes)
5、对体测成绩进行分数转换,跑步类(越小越好);跳远、体前屈(越大越好)
使用map、apply、transform方法
列索引重排
# 男生成绩
for col in ['男1000米跑', '男50米跑']:
score = rule[col]
def convert(x):
for i in range(len(score)):
if x <= score['成绩'].iloc[0]:
if x == 0:
return 0
return 100
elif x > score['成绩'].iloc[-1]:
return 0
elif (x > score['成绩'].iloc[i - 1]) and (x <= score