如果不满足条件,我该如何给出错误消息?

时间:2019-12-04 15:19:51

标签: python python-3.x

我正在做基础编程课程的作业。

我有一个包含以下各列的数据框(csv文件):

   StudentID                       Name  Assignment1  Assignment2  Assignment3 
0    s123456           Michael Andersen            7            7             4
1    s123789           Bettina Petersen           12           10            10
2    s123468             Thomas Nielsen           -3            7             2
3    s123579               Marie Hansen           10           12            12
4    s123579               Marie Hansen           10           12            12
5    s127848            Andreas Nielsen            2            2             2
6    s120799           Mads Westergaard           12           12            10
7    s123456           Michael Andersen            7            7             4
8    S184507  Andreas Døssing Mortensen            2            2             4
9    S129834             Jonas Jonassen            0           -3             4
10   S123481             Milad Mohammed           12           10             7
11   S128310                Abdul Jihad           10            4             7
12   S125493             Søren Sørensen            0            7             7
13   S128363                        123            4            7            10
14   S127463              Jensen Jensen            5            2            10
15   S120987                 Jeff Bezos           12           12            12

如果不满足条件,我需要使程序给出错误消息。在这种情况下,如果一个学生在数据框中不止一次,并且为作业给出的成绩不在等级范围内(-3、0、2、4、7、10、12):

分配如下:

如果用户选择检查数据错误,则必须在已加载的数据文件中显示错误报告(如果有)。您的程序必须至少检测并显示有关以下可能错误的信息: 1.如果数据中的两个学生具有相同的学生ID。 2.如果数据集中的等级不是7步尺度上的可能等级之一。

我该如何解决?

我已经尝试过解决这个问题,但是没有运气:

doubles = dataDuplicate [“ Name”]。duplicated()

打印(加倍)

grades = np.array([-3,0,2,4,7,10,12])

dataSortGrades = dataSortGrades.iloc [:,2:]#这给出了

gradesNotInList = np.isin(dataSortGrades,grades)

如果dataDuplicate [“ Name”]为双精度== True:     打印(“错误”) 其他:     打印(#列表的错误值”)

2 个答案:

答案 0 :(得分:0)

标准方法是:

if condition:
    print(message)

其中condition(或not condition)和message应该根据您的特定需求进行调整。

答案 1 :(得分:0)

您不需要创建3个数据帧。您可以只创建数据框,然后根据您的条件进行选择。

import pandas as pd
import re

data = """0    s123456           Michael Andersen            7            7             4
1    s123789           Bettina Petersen           12           10            10
2    s123468             Thomas Nielsen           -3            7             2
3    s123579               Marie Hansen           10           12            12
4    s123579               Marie Hansen           10           12            12
5    s127848            Andreas Nielsen            2            2             2
6    s120799           Mads Westergaard           12           12            10
7    s123456           Michael Andersen            7            7             4
8    S184507  Andreas Døssing Mortensen            2            2             4
9    S129834             Jonas Jonassen            0           -3             4
10   S123481             Milad Mohammed           12           10             7
11   S128310                Abdul Jihad           10            4             7
12   S125493             Søren Sørensen            0            7             7
13   S128363                        123            4            7            10
14   S127463              Jensen Jensen            5            2            10
15   S120987                 Jeff Bezos           12           12            12"""

#Make the data frame
data = [re.split(r"\s{2,}", line)[1:] for line in data.splitlines()]
df = pd.DataFrame(data, columns=['StudentID', 'Name', 'Assignment1', 'Assignment2', 'Assignment3'])

#print the duplicates
print(f'###Duplicate studentIDs###')
print(df[df['StudentID'].duplicated()])

#print invalid grades
valid_grades = ('-3', '0', '2', '4', '7', '10', '12')
print(f'###Invalid grades###')
print(df[
    (df['Assignment1'].isin(valid_grades) == False) |
    (df['Assignment2'].isin(valid_grades) == False) |
    (df['Assignment3'].isin(valid_grades) == False)
])

输出

###Duplicate studentIDs###
  StudentID              Name Assignment1 Assignment2 Assignment3
4   s123579      Marie Hansen          10          12          12
7   s123456  Michael Andersen           7           7           4
###Invalid grades###
   StudentID           Name Assignment1 Assignment2 Assignment3
14   S127463  Jensen Jensen           5           2          10