Pandas小技巧,给Excel添加一列,处理成绩数字的等级

蚂蚁学Python

共 2464字,需浏览 5分钟

 · 2023-01-06

给大家分享一个Pandas处理Excel的非常小的技巧知识点。

怎样给一个Excel添加一列,这一列是根据其它列的数字计算出来的。

问题定义

问题是这样的一个输入的excel文件:

学号 姓名 性别 成绩
101 王小丽 女 69
102 王宝勤 男 85
103 杨玉萍 女 49
104 田东会 女 90
105 陈雪蛟 女 73
106 杨建丰 男 42
107 黎梅佳 女 79
108 张兴 男 91
109 马进春 女 48
110 魏改娟 女 100
111 王冰研 男 64

其中成绩是一列数字,那么怎样给成绩划分等级?如下是划分等级的计算规则:

60分以下为E级
60~69分为D级
70~79分为C级
80~89分为B级
90分以上为A级

如下进行处理,简单起见,我挨个进行解释:

1. 导入pandas模块,读取excel文件

import pandas as pd

df = pd.read_excel("成绩表.xlsx", sheet_name=0)

第一句导入了pandas模块,这是python的数据处理和统计分析的重要模块。

pd.read_excel可以读取excel的文件,sheet_name=0意思是读取第一个sheet表格的数据。

这个df非常重要,表达的就是一个表格数据。

2. 编写自己的根据成绩划分等级的函数

def grade_to_level(grade):
    """
    grade是成绩
    把这个Excel中的成绩,划分为A- E这五个分数区间。
    60分以下为E级、60~69分为D级、
    70~79分为C级、80~89分为B级、90分以上为A级。
    """

    if grade >= 90:
        return 'A'
    elif grade >= 80:
        return 'B'
    elif grade >= 70:
        return 'C'
    elif grade >= 60:
        return 'D'
    else:
        return 'E'

这个函数有个特点,输入的参数是grade,其实就是一个数字,而这个数字,是excel表格的“数字”这一列的每个值。

而这个函数的返回,就是这个数字划分后的等级,是5个字符串,A~E

注意,这个函数的输入是单个数字,输出是单个字符串。这个字符串将成为excel新列的每个值。

3. 给pandas的数据表df添加一个新列

df['等级'] = df['成绩'].apply(grade_to_level)

其中df['成绩']意思是访问了当前excel的“成绩”这一列,这是一列数据,里面有很多数字。

df['成绩'].apply是在这个成绩列上调用的函数,而这个函数很神奇,会调用我们第2步骤自己写的 grade_to_level 函数。

这行代码执行的逻辑,是取出成绩列的每个成绩数字,传给grade_to_level函数的每个grade参数,得到结果是等级字符串。

而这些等级字符串串联在一起,形成了一个新的列。

这个新列和成绩列的行数一模一样相等,同时每个等级和每个成绩是一一对应的关系。

而等式左侧的df['等级']则接收了这个结果的列。

最终这行代码实现了,成绩列被grade_to_level一一转换成了等级列。

4. 输出成结果excel文件

df.to_excel("成绩表分类后.xlsx", index=False)

这一列,将新的处理后的df,输出成一个excel文件,名字是 成绩表分类后.xlsx

如果不加index=False这个参数,那么输出的结果表格中,会多一列,里面是从0开始到1到一直递增的数字,无意义。所以一般都加上这个参数。

5. 最后的效果

输入文件截图:

输出文件结果:

6. 数据和代码地址

代码地址,自己粘贴到浏览器访问:

https://gitee.com/antpython/ant-codes-publish/tree/master/01pandas/01pandas%E7%BB%99%E6%88%90%E7%BB%A9%E5%88%86%E7%BA%A7%E5%88%AB


浏览 148
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报