我试图分析篮球队的逐场比赛数据 我所做的是将csv文件读入DataFrame对象。
我希望在向现有对象添加新属性时保留DataFrame对象的功能。于是我写了一个叫做篮球的课程:
from data_math import *
import pandas as pd
class Basketball(pd.DataFrame):
def __init__(self,*args,**kargs):
pd.DataFrame.__init__(self,*args,**kargs)
self.FGM = calculate_FGM(pd.DataFrame)
self.FGA = calculate_FGA(pd.DateFrame)
self.FGP = self.FGM / self.FGA
self.M3 = calculate_3M(pd.DataFrame)
self.A3 = calcualte_3A(pd.DataFrame)
self.P3 = self.M3 / self.A3
self.FTM = calcualte_FTM(pd.DataFrame)
self.FTA = calculate_FTA(pd.DataFrame)
self.FTP = self.FTM / self.FTA
# self.P = score_calculate(pd.DataFrame)
我写了另一个data_math.py文件来帮助计算我想包含在篮球课中的不同属性。
from pandas import DataFrame
def score_calculate(df):
df_pt_scored = df[((df['etype']=='shot') & (df['result']=='made'))]
df_ft_scored = df[((df['etype']=='free throw') & (df['result']=='made'))]
return df_pt_scored['points'].sum()+len(df_ft_scored.index)
def calculate_FGM(df):
cond_pt = (df['etype']=='shots') & (df['results']=='made')
cond_ft = (df['etype']=='freethrow') & (df['results']=='made')
return len(df[cond_pt].index)+len(df[cond_ft].index)
def calculate_FGA(df):
shot_cond= df['etype']=='shot'
free_throw_cond = df['etype']=='free throw'
return len(df[shot_cond].index)+len(df[free_throw_cond].index)
def calculate_3M(df):
cond_3M= (df['etype']=='shot')&(df['type']=='3pt')&(df['result']=='made')
return len(df[cond_3M].index)
def calcualte_3A(df):
cond_3A = (df['etype']=='shot')&(df['type']=='3pt')
return len(df[cond_3A].index)
def calculate_FTM(df):
cond_FTM =(df['etype']=='free throw') & (df['result']=='made')
return len(df[cond_FTM].index)
def calcualte_FTA(df):
cond_FTA =(df['etype']=='free throw')
return len(df[cond_FTA].index)
最后,我从main.py开始我的程序,我希望它能给我正确的输出。但是在这行执行时:
team1= Basketball(tm1)
我收到了以下回溯
Traceback (most recent call last):
File "/Users/luoyicheng/Developer/STAR-Research/data_analysis/source code/main.py", line 20, in <module>
team1= Basketball(tm1)
File "/Users/luoyicheng/Developer/STAR-Research/data_analysis/source code/Basketball.py", line 6, in __init__
self.FGM = calculate_FGM(pd.DataFrame)
File "/Users/luoyicheng/Developer/STAR-Research/data_analysis/source code/data_math.py", line 9, in calculate_FGM
cond_pt = (df['etype']=='shots') & (df['results']=='made')
TypeError: 'type' object has no attribute '__getitem__'
我是python编程新手,无法理解为什么会发生这种错误。据我所知,这个错误意味着我无法使用数据帧的索引功能。但是,如果我尝试在我的主函数中编写类似的代码,我就能够得到我想要的输出。我也不清楚如何扩展现有的DataFrame类,以便在将team1对象扩展为具有FGM、FGA等属性时仍然可以访问DataFrame类中的方法
扩展这个类的想法是允许我在Basketball()中传递任何DataFrame对象,这样我就可以拥有一个具有扩展属性和方法的对象。我想我也不了解init和self的用法。
请不要责怪我没有清楚地描述问题,因为我不熟悉OOP中的所有术语。
非常感谢!
您正在传递类型为的每个函数
pd.DataFrame
:因此出现异常消息。
您的意思是传递self(属于DataFrame类型):
应改为:
相关问题 更多 >
编程相关推荐