我正在做基础编程课程的作业。
我有一个包含以下各列的数据框(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: 打印(“错误”) 其他: 打印(#列表的错误值”)
答案 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