给出一组数据
'Student ID', 'Grade', 'Weight'
'111112', '76', '24'
'111112', '66', '14'
'222223', '46', '14'
'333334', '96', '18'
'444445', '56', '17'
我如何通过行来仅选择"等级"列,并将等效的字母等级写入名为"字母等级"的新列。到目前为止我所做的是制作新专栏,但我不知道如何填写从"等级"柱。
with open(args.source, 'rb') as source_file:
with open(args.output, 'wb') as output_file:
reader = csv.reader(source_file, delimiter = '\t')
writer = csv.writer(output_file, lineterminator = '\n')
headers = next(reader, None)
if headers:
writer.writerow(headers + ['Letter Grade'])
print('Done.')
答案 0 :(得分:0)
首先,您必须定义从Letter Grade
中制作Grade
的规则。然后,您可以将该规则转换为代码。我会使用一个简单的,任何等级> = 60一个P
,以及其他任何F
:
for student_id, grade, weight in reader:
numeric_grade = int(grade)
letter_grade = 'P' if numeric_grade >= 60 else 'F'
writer.writerow((student_id, grade, weight, letter_grade))
无论你的实际规则是什么,你都应该能够弄清楚如何用它代替我的单行代码。
如果您现有的代码以不同的方式迭代行 - 例如,使用for row in reader:
然后依赖row[0]
和row[1]
- 再次显而易见的是如何调整我的-liner适合你正在做的事情(以及写row + [letter_grade]
等)。
答案 1 :(得分:0)
def get_letter_grade(score):
# define your own rules here
if score<50:
return "F"
if score <60:
return "D"
if score<70:
return "C"
if score<80:
return "B"
return "A"
with open(args.source, 'r') as source_file, open(args.output, 'w') as output_file:
writer = csv.writer(output_file, lineterminator='\n')
reader = csv.reader(soure_file, delimiter=',')
headers = next(reader)
headers.append('Letter Grade')
for row in reader:
row = [i.strip().replace("'", '') for i in row]
grade = int(row[1])
letter_grade = get_letter_grade(grade)
writer.writerow(row + [letter_grade])