【发布时间】:2019-12-09 10:46:29
【问题描述】:
我试图在同一个脚本中创建两个函数 - 但是当我将它们导入我的主脚本并首先运行第一个 finalGrade(grades) 时,grades 已更改为额外的列 'Final Grade'。我该如何防止这种情况?
在第一个函数中,我使用另一个函数返回 DataSet,每个学生的最终成绩如下:
# Made Andreas Døssing Mortensen s184507 & Mads Westergaard s180799
import numpy as np
import pandas as pd
from roundGrade import roundGrade
def computeFinalGrades(grades):
#making an array from dataFrame
arr=grades.values
#sorting and deleting the first two columns
gradesarr=np.sort(np.delete(arr,(0,1),axis=1))
#setting up a list for the final grades
gradesInList=np.zeros(len(gradesarr))
for i in range(len(gradesarr)):
#if -3 is in a row, the final grade should be = -3
if -3 in gradesarr[i]:
gradesInList[i]= -3
#if there is 2 or more grades in a row, execute the procedure below
elif len(gradesarr[i])>=2:
#Delete the smallest grade
meangrade=np.delete(gradesarr,0,axis=1)
#taking the mean of each row
finalgrade = np.mean(meangrade[i])
#making a list with all the final grades
gradesInList[i] = roundGrade(finalgrade)
# if there is only one value in the row, return that as the final grade
elif len(grades[i])==1:
gradesInList[i] = gradesarr
#Setting up the dataFrame again
df = pd.DataFrame(grades)
#Adding final grades to DataFrame
df['Final Grade']=gradesInList
#Show all columns
pd.set_option('display.max_columns', None)
gradesFinal=df
return gradesFinal
我的绘图函数如下所示:
#Importing add-ins
import matplotlib.pyplot as plt
import numpy as np
#import pandas as pd
#importing function
from computeFinalGrades import computeFinalGrades
def finalGrade(grades):
#Counting number of occurencies of each grade and set labels for x,y
computeFinalGrades(grades)['Final Grade'].value_counts().sort_index().plot("bar",title="Final grades").set(xlabel='Grades',ylabel='Count')
#show plot
plt.show()
return
def assignmentGrades(grades):
#create an array with all grades
array = grades.values
#Sorting and deleting "Name" and "StudentID" from the array
gradesarray = np.sort(np.delete(array,(0,1),axis=1))
#making a for loop, to iterate trough array
for i in range(len(gradesarray)):
#Defining the length of the array to define max x-values
num_ass = len(gradesarray[0])
#Setting the x-axis values to correspond with number of assignments + a jiggler in the interval [-.1,.1] on both axis
x = np.arange(1,num_ass+1) + np.random.uniform(-0.1,0.1)
y = gradesarray[i,:] + np.random.uniform(-0.1,0.1)
#Plotting the x,y "o" for creating scatterplot
plt.plot(x, y,"o")
#Drawing mean of grades as line
meangrade = np.mean(gradesarray,0)
#Plotting the mean grade as a line
plt.plot(x,meangrade)
#Set labels for x,y
plt.xlabel('Assignments')
plt.ylabel('Grades')
#show plot
plt.show()
return
希望大家能帮忙解决一个简单的问题,我似乎无法弄清楚。
【问题讨论】:
标签: python pandas numpy dataframe matplotlib