从python中的父类继承作为数据帧的属性

2024-04-19 20:10:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个类,其中一个属性是一个日期框

class AthletesJsonReader(object):
    def __init__(self, df=None, # A lot of other irrelevant attributes )
    self.df = df

还有一种写它的方法

    def pd_table(self):
        d = {'Name': self.names, 'PTS': self.pts, 'REB': self.reb, 'AST': self.ast, 'STL': 
              self.stl,
             'BLK': self.blk, 'FGM': self.fgm, 'FGA': self.fga, 'FG%': self.fgp, '3PM': 
              self.three_pm,
             '3PA': self.three_attempted, '3P%': self.three_percent, 'FTM': self.ftm,
             'FTA': self.fta, 'FT%': self.percent_ft}
        self.df = pd.DataFrame(d)

当我试图继承self.df并在另一个子类方法中使用它时,它将返回none和 错误

    def __init__(self):
        draft.AthletesJsonReader.__init__(self)

    def get_player_stats(self):
        print(self.df)
        player_name = input("enter player's name: ")
        end_name = player_name.title()
        player_stats = self.df.loc[self.df.Name == '{}'.format(end_name)]
        print(player_stats)

输出:

None
AttributeError: 'NoneType' object has no attribute 'loc'

我查了一下这里发生的事情,并没有找到一个直接的答案,或者只是我不理解他们。 例如:

How to subclass pandas DataFrame?

Subclassing a Pandas DataFrame, updates?

https://dev.to/pj_trainor/extending-the-pandas-dataframe-133l


Tags: 方法nameselfnonedataframedfobjectinit
1条回答
网友
1楼 · 发布于 2024-04-19 20:10:36

您继承的是类,而不是实例。创建子类实例时,self.df被初始化为None。您还需要在子类的某个地方调用self.pd_table()(或者在父类__init__,因为这是由子初始值设定项调用的)

例如,如果您有其他创建self.df的方法,但是您想确保它在需要时就在那里,您可以执行以下操作:

    def get_player_stats(self): 
        if not self.df:
            self.pd_table()
        print(self.df)

注意:这与“子类化数据帧”无关。如果您尝试执行class MyClass(pd.DataFrame):之类的操作,那么这将是相关的

相关问题 更多 >