按等级划分的分数分类

2024-09-28 17:21:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Marks.csv文件的列中有主题标记的数据,如下所示

    Students Marks
0   Santosh 90
1   Mahesh  35
2   Suresh  15
3   Ganesh  45
4   Ramesh  60
5   Supriya 25
6   Ritesh  50
7   Pooja   95

我想按等级对这些分数进行分类:

Marks > 80 (Distinguished);
Marks > = 50 & Marks < 80 (First Class);
Marks > = 35 & Marks < 50 (Second Class);
Marks  < 35 (Failed).

结果,我需要在相同的文件.csv中输出,如下所示

    Student Marks Grades
0   Santosh 90  Distinction
1   Mahesh  35  Secnd Class
2   Suresh  15  Failed
3   Ganesh  45  Secnd Class
4   Ramesh  60  First Class
5   Supriya 25  Failed
6   Ritesh  50  First Class
7   Pooja   95  Distinction

任何建议都是有益的


Tags: 文件csvclassfirstfailedmarkssantoshmahesh
2条回答

使用apply函数

代码

def add_grades(filenm):
    ''' Add Grades column to CSV file '''

    def mark_to_score(marks):
        " Converts a mark to a grade "
        if marks > 80:
          return "Distinguished"
        elif 50 <= marks < 80:
          return "First Class"
        elif 35 <= marks < 50:
          return "Second Class"
        else:
          return "Failed"

    # Read CSV file into pandas dataframe
    #   CSV file is space delimited
    df = pd.read_csv(filenm, delimiter=r"\s+")

    # Create Grades column
    df['Grades'] = df['Marks'].apply(mark_to_score)

    # Apply to function to Marks column to obtain grades
    df['Grades'] = df['Marks'].apply(mark_to_score)

    # Write output back to CSV (space delimited)
    df.to_csv(filenm, sep=' ')

用法

添加等级('CSV文件名.txt')

测试

输入文件('grades.txt'):

   Students Marks
0   Santosh 90
1   Mahesh  35
2   Suresh  15
3   Ganesh  45
4   Ramesh  60
5   Supriya 25
6   Ritesh  50
7   Pooja   95

输出文件('grades.txt')

 Students Marks Grades
0 Santosh 90 Distinguished
1 Mahesh 35 "Second Class"
2 Suresh 15 Failed
3 Ganesh 45 "Second Class"
4 Ramesh 60 "First Class"
5 Supriya 25 Failed
6 Ritesh 50 "First Class"
7 Pooja 95 Distinguished

注:成绩栏中的多个单词(如“第一类”)都在引号中,否则单词中的空格会被误认为是分隔符

早期代码中的一些更改。在这里,您可以保存Grades列而不会出现任何错误

import pandas as pd
    filenm = 'marks.csv'
    
    def mark_to_score(marks):
            " Converts a mark to a grade "
            if marks > 80:
              return "Distinguished"
            elif 50 <= marks < 80:
              return "First Class"
            elif 35 <= marks < 50:
              return "Second Class"
            else:
              return "Failed"
    df = pd.read_csv(filenm)
    df['Grades'] = df['Marks'].apply(mark_to_score)
    df.to.csv(filenm, sep='\t')

相关问题 更多 >