赵乾舟 发表于 2022-1-26 14:27:14

字符串统计案例--统计各等级出现的次数


红色框内为处理后的数据
需求:根据分数列,统计每个人获取优良中差的次数,写入C列
思路:循环B列数据,拿到每个数据,并在数据内循环计算优良中差每个等级的次数,并叠加字符串。知识点:本案例,字符串相加是关键。
下面是书中所示代码,利用的while循环实现
import xlrd #导入读取xls文件的库。
from xlutils.copy import copy #导入复制工作簿的函数。
wb=xlrd.open_workbook('Chapter-4-6-1.xls') #读取工作簿。
ws=wb.sheet_by_name('分数表') #读取工作表。
nwb=copy(wb) #复制工作簿产生一个副本。
nws=nwb.get_sheet('分数表') #读取副本工作簿中的工作表。
row_num=0 #初始化row_num变量为0。
txt='' #初始化txt变量为空。
while row_num<ws.nrows-1: #当row_num变量小于已使用单元格区域行数时。
    row_num +=1 #则对row_num变量累加1。
    score=ws.cell_value(row_num,1) #获取B列单元格的值。
    for level in '优良中差': #循环'优良中差'4个等级。
      lev_sco='{}:{}\t'.format(level,score.count(level)) #统计每个级别的个数,并进行格式化。
      txt +=lev_sco #累积连接各等级数量。
    nws.write(row_num,2,txt) #将统计结果写入C列单元格。
    txt='' #重新初始化txt变量,便于存储下个单元格各等级的统计结果。
nws.write(0,2,'等级统计') #在C列写入表头。
nwb.save('Chapter-4-6-1.xls') #保存副本工作簿。我自己利用for循环又写一遍,图中效果是下面代码运行所得
import xlrd
from xlutils.copy import copy
wb = xlrd.open_workbook('Chapter-4-6-1.xls')
ws = wb.sheet_by_index(0)
nwb = copy(wb)
nws = nwb.get_sheet('分数表')
for row in range(1,ws.nrows):
    txt = ''
    info = ws.cell_value(row,1)
    for j in '优良中差':
      num = info.count(j)
      a = f'{j}:{num};'
      txt = txt+a
    nws.write(row,2,txt)
nwb.save('s.xls')


页: [1]
查看完整版本: 字符串统计案例--统计各等级出现的次数