我正在学习数据科学环境中的面向对象编程。我想了解在一个类中编写相互关联的方法方面的良好做法是什么。当我运行我的代码时:import pandas as pd pd.options.mode.chained_assignment = None class MyData: def __init__(self, file_path): self.file_path = file_pathdef 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'。作为面向对象编程的新手,我想知道构造这样的东西是否被认为是好的做法,或者是否有其他方法可以做到这一点。谢谢你的帮助!
2 回答
至尊宝的传说
TA贡献1789条经验 获得超10个赞
在使用它之前确保你有 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
不负相思意
TA贡献1777条经验 获得超10个赞
如果 csv 文件在运行时未更改,您应该调用prepper_fun(self)
,__init__.
单独调用它会导致出现错误的可能性很高。
如果更改了 csv 文件,则其他答案非常有效
添加回答
举报
0/150
提交
取消