【问题标题】:Classifications of Marks by Grades分数等级分类
【发布时间】:2020-11-29 20:53:25
【问题描述】:

我在 ma​​rks.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

任何建议都是有帮助的。

【问题讨论】:

  • 太棒了!这对于纯 Python 和 csv 模块来说是一件简单的事情。你试过什么?
  • 我只是 Python 的初学者。我试过 if(avg>=80): print("Distinction") elif(avg>=50&avg=35&avg

标签: python loops csv for-loop if-statement


【解决方案1】:

使用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=' ')

用法

add_grade('CSV File.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

注意:成绩栏中的多个单词(例如“First Class”)用引号引起来,否则单词中的空格会被误认为是分隔符。

【讨论】:

    【解决方案2】:

    早期代码中的一些更改。在这里,您可以保存 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')
    

    【讨论】:

      猜你喜欢
      • 2018-04-10
      • 1970-01-01
      • 1970-01-01
      • 2018-11-27
      • 1970-01-01
      • 1970-01-01
      • 2018-02-19
      • 2015-10-07
      • 2016-08-12
      相关资源
      最近更新 更多