从数据科学中的另一种方法调用方法中定义的属性(python)

我正在学习数据科学环境中的面向对象编程。


我想了解在一个类中编写相互关联的方法方面的良好做法是什么。


当我运行我的代码时:


import pandas as pd 

pd.options.mode.chained_assignment = None  


class MyData:

    def __init__(self, file_path):

        self.file_path = file_path


def prepper_fun(self):

    '''Reads in an excel sheet, gets rid of missing values and sets datatype to numerical'''

    df = pd.read_excel(self.file_path) 

    df = df.dropna()                    

    df = df.apply(pd.to_numeric) 

    self.df = df

    return(df)


def quality_fun(self):

   '''Checks if any value in any column is more than 10. If it is, the value is replaced with

   a warning 'check the original data value'.'''

    for col in self.df.columns:

        for row in self.df.index:                                             

            if self.df[col][row] > 10:       

                self.df[col][row] = str('check original data value') 

    return(self.df) 


data = MyData('https://archive.ics.uci.edu/ml/machine-learning-databases/00429/Cryotherapy.xlsx')

print(data.prepper_fun())

print(data.quality_fun())

我得到以下输出(由于空间限制,只显示了部分输出):


     sex  age   Time  

0     1   35  12.00             

1     1   29   7.00               

2     1   50   8.00                

3     1   32  11.75                

4     1   67   9.25                         

..  ...  ...    ...       



     sex                        age                       Time 

0     1  check original data value  check original data value                  

1     1  check original data value                          7                  

2     1  check original data value                          8                  

3     1  check original data value  check original data value               

4     1  check original data value                       9.25 

..  ...                        ...                        ...

我对每种方法生成的输出感到满意。


print(data.quality_fun())但是,如果我不先调用就尝试调用print(data.prepper_fun()),则会出现错误AttributeError: 'MyData' object has no attribute 'df'。


作为面向对象编程的新手,我想知道构造这样的东西是否被认为是好的做法,或者是否有其他方法可以做到这一点。


谢谢你的帮助!


湖上湖
浏览 121回答 2
2回答

至尊宝的传说

在使用它之前确保你有 df。class MyData:    def __init__(self, file_path):        self.file_path = file_path        self.df = None    def quality_fun():       if self.df is None:          self.prepper_fun()       # rest of the code 

不负相思意

如果 csv 文件在运行时未更改,您应该调用prepper_fun(self) ,__init__.单独调用它会导致出现错误的可能性很高。如果更改了 csv 文件,则其他答案非常有效
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python