最近有点忙,好久没更新了,大家见谅!最后一关howell也做不出来
第1关:数据分析基础
1.将scores.xls文件读到名为df的dataframe中
2.添加平均分列:考勤、实验操作、实验报告的平均
3.输出前3行学生的平均分列表,控制小数点后两位
4.输出学生人数和班级数
5.分别输出实验报告中值、最高分、最低分
6.输出实验报告分最低的3位同学的姓名列表
第一关,第三问有更简洁的写法:
print(round(i,2) for i in list(df['平均分'])[0:3])
第四问,大家可以直接用shape函数,shape的输出结果是关于行和列的列表。也可以把序号便利一遍。
s=0
for i in df['姓名']:
s+=1
print(s)
第六问,本来是输出数组的,这里是原本的代码,现在改为了dataframe,答案如最终代码所示:
df2=df.head(3)
lis3=[]
for i in df2['姓名']:
lis3.append(i)
str1=str(lis3)
str2=str1.replace(',','')
print(str2)
import pandas as pd
import warnings
warnings.filterwarnings('ignore')
# 1.将scores.xls文件读到名为df的dataframe中
############begin############
df=pd.read_excel('scores.xls')
#############end#############
#2.添加平均分列:考勤、实验操作、实验报告的平均
############begin############
df['平均分']=(df['考勤']+df['实验操作']+df['实验报告'])/3
#############end#############
#3.输出前3行学生的平均分列表,控制小数点后两位
############begin############
num1='%.2f'%(df.loc[0,'平均分'])
num2='%.2f'%(df.loc[1,'平均分'])
num3='%.2f'%(df.loc[2,'平均分'])
lis1=[eval(num1),eval(num2),eval(num3)]
print(lis1)
#############end#############
#4.输出学生人数和班级数
############begin############
print(df.shape[0])
s=0
lis2=[]
for i in df['班级名称']:
if i not in lis2:
s+=1
lis2.append(i)
print(s)
#############end#############
#5.分别输出实验报告中值、最高分、最低分
############begin############
df=df.sort_values(by=['实验报告'],ascending=True)
print(df.iloc[16,8])
print(df.iloc[-1,8])
print(df.iloc[0,8])
#############end#############
#6.输出实验报告分最低的3位同学的姓名列表
############begin############
print(df.iloc[0:3,1])
#############end#############
第2关:数据排序和检索
1.将scores.xls文件读到名为df的dataframe中
2.添加综合分列:考勤20%实验操作20%实验报告60%
3.按综合分降序和学号升序排序(临时排序,不改变原有顺序)
4.输出综合分最高的同学的姓名和学号(可能有多位同学)
5.输出性别为“男”而且实验报告>90的同学的姓名和综合分信息
6.将当前dataframe保存到文件scores_new.xls中
import pandas as pd
import warnings
warnings.filterwarnings('ignore')
# 1.将scores.xls文件读到名为df的dataframe中
############begin############
df=pd.read_excel('scores.xls')
#############end#############
#2.添加综合分列:考勤20%实验操作20%实验报告60%
############begin############
df['综合分']=df['考勤']*0.2+df['实验操作']*0.2+df['实验报告']*0.6
#############end#############
#3.按综合分降序和学号升序排序(临时排序,不改变原有顺序)
############begin############
df1=df.sort_values(by=['综合分','学号'],ascending=[False,True])
#############end#############
#4.输出综合分最高的同学的姓名和学号(可能有多位同学)
############begin############
df2=df.loc[df['综合分']==max(df['综合分'])]
print(df2[['姓名','学号']])
#############end#############
#5.输出性别为“男”而且实验报告>90的同学的姓名和综合分信息
############begin############
print(df.loc[(df.性别=='男')&(df.实验报告>90),['姓名','综合分']])
#############end#############
#6.将当前dataframe保存到文件scores_new.xls中
############begin############
df1.to_excel('scores_new.xls')
#############end#############
第3关:分组统计及可视化
如果最后一关不能直接通过,记得把前两关运行一遍
import pandas as pd
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings('ignore')
plt.rcParams['font.sans-serif'] = ['SimHei'] # 步骤一(替换sans-serif字体)
plt.rcParams['axes.unicode_minus'] = False # 步骤二(解决坐标轴负数的负号显示问题)
# 1.将scores_new.xls文件读到名为df的dataframe中
############begin############
df=pd.read_excel('scores_new.xls')
#############end#############
#2.按性别统计实验报告分的均值,绘制条图,保存到图片文件filename
def draw_bar(filename):
plt.figure('fig1')
############begin############
n=df.groupby('性别')['实验报告'].mean()
colors=['red','green']
plt.bar(n.index,n.values,color=colors)
plt.xticks(n.index,['女','男'])
plt.xlabel('性别')
plt.ylabel('成绩')
plt.title('不同性别的实验报告平均成绩')
for i,j in zip(n.index,n.values):
plt.text(i,j+0.5, '%.2f'%j, ha = 'center')
plt.savefig(filename)
plt.show()
#############end#############
#3.统计男女比例,绘制饼图,保存到图片文件filename
def draw_pie(filename):
plt.figure('fig2')
############begin############
n =df.groupby('性别').size()
labels = ['女','男']
plt.pie(n.values, labels=labels, autopct = '%1.2f%%')
plt.savefig(filename)
plt.show()
#############end#############
#4.按班级统计各成绩均值,绘制折线图,保存到图片文件filename
def draw_line(filename):
plt.figure('fig3')
############begin############
a=df.groupby('班级名称')['考勤'].mean()
b=df.groupby('班级名称')['实验操作'].mean()
c=df.groupby('班级名称')['实验报告'].mean()
d=df.groupby('班级名称')['综合分'].mean()
x=['考勤','实验操作','实验报告','综合分']
y1= [a[0],b[0],c[0],d[0]]
y2= [a[1],b[1],c[1],d[1]]
plt.plot(x,y1,label='一班',marker='*')
plt.plot(x,y2,label='二班',marker='d')
plt.legend()
plt.savefig(filename)
plt.show()
#############end#############
版权归原作者 howell(Python) 所有, 如有侵权,请联系我们删除。