当前位置:首页 > 科技

【excel保存怎么覆盖】python其实很简单。第二十三章全校学生成绩统计的完整事例。

以下是用DataFrame重写第17章介绍的程序。

From warnings import simplefilter

简单过滤器(action=' ignore ',category=futurewarning)

# simplefilter用于忽略第三方警报

Import numpy as NP

Import pandas as PD

From pandas import read_excel

文件=' d:/'

表18-1中列出的#Excel文件地址

Df=read _ excel(文件,工作表名称=0,converters={ '学号' :str})

将# Excel文件读入DataFrame数据框架df

Df['年级']=df['学号'].(0,2)

使用# slice()函数实现slice并向“年级”字段分配值

Df['类']=df['学号'].(0,4)

使用# slice()函数实现slice并向“类”字段分配值

Df。总分=df。语言df。数学df。英语

#列合计,分配列

Df['排名']=df['总分']。rank (method=' min ',ascending=false)

#rank()函数method='min '时,与Excel中完全相同,ascending=False是升序排序

Df.to _ excel ('d:/',sheet _ name=' sheet1 ',index=false)

# DataFrame将数据框架df中的数据保存到Excel文件中

#现在,新Excel文件中的Sheet1工作表数据填充已完成。

Dfpj=df.groupby('类')['语言','数学','英语','总分']。mean()

#按“类”列平均分组、语言、数学、英语、总分,并存储在数据框架dfpj中

dfrs=df . group by(' class ')['学号']。agg({ '人员' :np.size})

#按“类”列分组,“学号”列数,“人数”别名存储在数据框架df人数中

Jg72=72

#语言,设置为数学科目72分及格分数线

Jg60=60

#英语科目设置为60分及格分数线

Yx96=96

以# 96分为优秀分数线,用于语文、数学科目

Yx80=80

以# 96分为优秀分数线,用于英语科目

Df['语言和']=df['语言']

#添加新列“语言和”,并将“语言”列中的值映射到

Df['数和']=df['数学']

#添加新行“数和”,并将“数学”行值映射到

Df['英语和']=df['英语']

#将新列“英语”和“英语”列中的值映射到

Df['语音']=df['语言']

#添加新列“词”,并将“词”列中的值映射到

Df['优数']=df['数学']

#添加新行“storm sewers”,并将“数学”列中的值映射到

Df['英宇']=df['英语']

#添加新列“英宇”,并将“英语”列中的值映射到

#以上6行是目前的成绩值,以后将用于单一率、通过率和优秀率

#函数fun(x,y)判断x=y是否为真,成立返回1。如果交易没有成功,则返回0

Def fun(x,y):

If x=y:

Return 1

Else:

Return 0

Df['语言和']=df['语言和']。apply(lamda x 3360 fun(x、jg72))

#之前指定了“语言”和“语言”值,这个语句相当于判断语言=72是否成立。

#如果成立,则“呃”和“值1”,否则值0

d

f['数及']=df['数及'].apply(lambda x:fun(x,jg72))

#同上,判断数学成绩是否及格

df['英及']=df['英及'].apply(lambda x:fun(x,jg60))

#同上,判断英语成绩是否及格

df['语优']=df['语优'].apply(lambda x:fun(x,yx96))

#同上,判断语文成绩是否优秀

df['数优']=df['数优'].apply(lambda x:fun(x,yx96))

#同上,判断数学成绩是否优秀

df['英优']=df['英优'].apply(lambda x:fun(x,yx80))

#同上,判断英语成绩是否优秀

df['合格']=df['语及']+df['数及']+df['英及']

#'语及'、'数及'、'英及'的值均为0或1,故'合格'的值在0~3之间

df['优秀']=df['语优']+df['数优']+df['英优']

#'语优'、'数优'、'英优'的值均为0或1,故'优秀'的值在0~3之间

df['合格']=df['合格'].apply(lambda x:fun(x,3))

#若'合格'的值>=3(其实不可能大于),给'合格'赋值为1;否则赋值为0

df['优秀']=df['优秀'].apply(lambda x:fun(x,3))

#若'优秀'的值>=3(其实不可能大于),给'优秀'赋值为1;否则赋值为0

dfjgyx=df.groupby('班级')['语及','语优','数及','数优','英及','英优','合格','优秀'].sum()

#按照'班级'分组统计'语及'等项的和,实际上就是各个单科和三科合格、优秀的人数

dftj=(dfpj,dfjgyx,on='班级')

#将dfpj(包含有平均分)和dfjgyx(及格、优秀人数)按照'班级'关键字连接,保存到dftj

dftj=(dftj,dfrs,on='班级')

#将dfrs连接到dftj

dftj['语文']=round(dftj['语文'],2)

#班级语文平均分保留两位小数

dftj['数学']=round(dftj['数学'],2)

#班级数学平均分保留两位小数

dftj['英语']=round(dftj['英语'],2)

#班级英语平均分保留两位小数

dftj['总分']=round(dftj['总分'],2)

#班级每个学生的三科总分的平均值保留两位小数

dftj['语及']=round((dftj['语及']/dftj['人数'])*100,2)

#语文及格人数/班级人数*100,保留两位小数,即为语文及格率,保存到'语及'列

dftj['语优']=round((dftj['语优']/dftj['人数'])*100,2)

#语文优秀人数/班级人数*100,保留两位小数,即为语文优秀率,保存到'语优'列

dftj['数及']=round((dftj['数及']/dftj['人数'])*100,2)

#数学及格人数/班级人数*100,保留两位小数,即为数学及格率,保存到'数及'列

dftj['数优']=round((dftj['数优']/dftj['人数'])*100,2)

#数学优秀人数/班级人数*100,保留两位小数,即为数学优秀率,保存到'数优'列

dftj['英及']=round((dftj['英及']/dftj['人数'])*100,2)

#英语及格人数/班级人数*100,保留两位小数,即为英语及格率,保存到'英及'列

dftj['英优']=round((dftj['英优']/dftj['人数'])*100,2)

#英语优秀人数/班级人数*100,保留两位小数,即为英语优秀率,保存到'英优'列

dftj['合格']=round((dftj['合格']/dftj['人数'])*100,2)

#三科合格人数/班级人数*100,保留两位小数,即为三科合格率,保存到'合格'列

dftj['优秀']=round((dftj['优秀']/dftj['人数'])*100,2)

#三科优秀人数/班级人数*100,保留两位小数,即为三科优秀率,保存到'优秀'列

dftj=dftj[['人数','语文','语及','语优','数学','数及','数优','英语','英及','英优','总分','合格','优秀']]

#重新调整dftj的各个字段的次序,为输出到Excel做准备

d('d:/',sheet_name='Sheet1',index=True)

#将数据框架dftj的数据保存到Excel文件中,索引列'班级'也一并写入


P23-1运行后生成如下两个表格:

解决写入Excel文件的内容不被覆盖的方法

在上面的代码中,to_excel()方法将DataFrame中的数据写入了某个指定的Excel文件的指定工作表中,第二次运行程序时会将Excel中以前保存的内容覆盖掉,若要想写入到新的工作表中,可在程序中添加如下代码,它利用了openpyxl的特点,它会自动新建一个以sheet_name为名后缀序号的新工作表:

# :

import openpyxl

#导入openpyxl模块

#以下为自定义函数add_sheet()

def add_sheet(data, excel_writer, sheet_name):

book = o)

#为openyxl方法指定要打开的Excel文件地址

excel_wri = book

#为excel_writer方法指定工作簿

da(excel_writer=excel_writer, sheet_name=sheet_name, index=True, header=True)

#将data数据框中的数据写入Excel文件,index为真表示添加索引列,header为真表示添加标题行

excel_wri()

excel_writer = (r"d:\;, engine='openpyxl')

#指明用openpyxl操作Excel文件

add_sheet(dftj, excel_writer, 'bjtj')

这样,就可以在文件中每次都新建一个名为“bjtj+n”的工作表,而不覆盖原有的工作表。

在前述的中,为了获取三科成绩全部及格的人数,使用了一个自定义函数fun(x,y),用该函数先判断每一科成绩是否及格,若及格则写入一个标识值为1,若不及格则写入一个标识值为0,然后再用fun(x,y)这个函数判断三科是否全部及格。这个方法显得比较繁琐,下面给出了另一种解决方法,它通过条件筛选出三科全部及格的学生并添加到一个新的数据框架中。如下代码只实现了中的部分功能,没有计算单科及格率、优秀率等。

Py23-3.py代码:

from warnings import simplefilter

simplefilter(action='ignore', category=FutureWarning)

import numpy as np

import pandas as pd

from pandas import read_excel #导入read_execel


file='d:/'

df=read_excel(file,sheet_name=0,converters={'学号':str})

df['年级']=df['学号'].(0,2)

df['班级']=df['学号'].(0,4)

df.总分=df.语文+df.数学+df.英语

dfhg=df[(df['语文']>=72) & (df['数学']>=72) & (df['英语']>=60)]

#将df中符合合格标准(三科都及格)的记录保存到dfhg中

dfyx=df[(df['语文']>=96) & (df['数学']>=96) & (df['英语']>=80)]

#将df中符合优秀标准(三科都优秀)的记录保存到dfhg中

dfpj=df.groupby('班级')['语文','数学','英语','总分'].mean()

#求班级单科平均值和总分平均值保存到dfpj中

dfrs=df.groupby('班级')['学号'].agg({'人数':np.size})

#dfrs中保存各班总人数

dfhg=d('班级')['学号'].agg({'合格':np.size})

#dfhg中保存各班合格人数

dfyx=d('班级')['学号'].agg({'优秀':np.size})

#dfhg中保存各班优秀人数

dftj=(dfpj,dfhg,on='班级',how='left')

#以dfpj为基础,以'班级'为连接键,将dfhg连接到dfpj上,生成dftj

dftj=(dftj,dfyx,on='班级',how='left')

#以dftj为基础,以'班级'为连接键,将dfyx连接到dftj上

dftj=(dftj,dfrs,on='班级',how='left')

#以dftj为基础,以'班级'为连接键,将dfrs连接到dfpj上

dftj['语文']=round(dftj['语文'],2)

dftj['数学']=round(dftj['数学'],2)

dftj['英语']=round(dftj['英语'],2)

dftj['总分']=round(dftj['总分'],2)

dftj['合格']=round((dftj['合格']/dftj['人数'])*100,2)

dftj['优秀']=round((dftj['优秀']/dftj['人数'])*100,2)

dftj=d(0)

#用0填充NaN值

d('d:/',sheet_name='Sheet1',index=True)

#将数据框架dftj的数据保存到Excel文件中,索引列'班级'也一并写入

P23-3.py运行后生成的excel表格():

1.《【excel保存怎么覆盖】python其实很简单。第二十三章全校学生成绩统计的完整事例。》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《【excel保存怎么覆盖】python其实很简单。第二十三章全校学生成绩统计的完整事例。》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/keji/2520484.html

上一篇

【excel怎么代替字符】两个excel中神奇的符号竟然能使模糊匹配变得如此精确。

【excel保存怎么覆盖】0基础学excel:只能保存和打印菜单上的文件模块吗?

  • 【excel保存怎么覆盖】0基础学excel:只能保存和打印菜单上的文件模块吗?
  • 【excel保存怎么覆盖】0基础学excel:只能保存和打印菜单上的文件模块吗?
  • 【excel保存怎么覆盖】0基础学excel:只能保存和打印菜单上的文件模块吗?

【excel保存怎么覆盖】实施Node.js Vue Excel导出和保存

  • 【excel保存怎么覆盖】实施Node.js Vue Excel导出和保存
  • 【excel保存怎么覆盖】实施Node.js Vue Excel导出和保存
  • 【excel保存怎么覆盖】实施Node.js Vue Excel导出和保存
【excel保存怎么覆盖】用Excel表替换文本文件第一列的内容

【excel保存怎么覆盖】用Excel表替换文本文件第一列的内容

excel保存怎么覆盖相关介绍,要将文本文件第一列的内容替换为Excel表: 1.保存文本的内容,用空格分隔。 2.创建新的Excel表文件并打开Excel表。 3.打开,然后选择文件名后缀作为所有文件。打开文本文件。 4.选择限定...

【excel保存怎么覆盖】提高Excel工作簿运营效率的4个提示,每天节省15分钟

  • 【excel保存怎么覆盖】提高Excel工作簿运营效率的4个提示,每天节省15分钟
  • 【excel保存怎么覆盖】提高Excel工作簿运营效率的4个提示,每天节省15分钟
  • 【excel保存怎么覆盖】提高Excel工作簿运营效率的4个提示,每天节省15分钟
【excel保存怎么覆盖】Excel——自动保存

【excel保存怎么覆盖】Excel——自动保存

excel保存怎么覆盖相关介绍,“电脑死机了!花了一上午时间做的样式都消失了。” 我经常在推特上看到这样嚎啕大哭的人。所以我通过推特上的自动投稿功能,每天发表以下文章。 “我已经说过不止一次了。使用Excel时,必须设置自动保存,并...

【excel保存怎么覆盖】保存Excel文档

  • 【excel保存怎么覆盖】保存Excel文档
  • 【excel保存怎么覆盖】保存Excel文档
  • 【excel保存怎么覆盖】保存Excel文档