面向对象的数据帧转换设计



我正在尝试将面向对象的设计应用到我的数据科学项目中。对于数据清理,我们通常从一个表(数据帧(开始,然后对这个数据帧进行转换(例如,在现有列的基础上创建一个新列,将两列添加在一起等(。

我最初的想法(在python中(基本上是创建一个类Data,该类将有一个底层pandas数据帧作为私有成员,并在该类中提供额外的方法来转换数据。当我走到这一步后,我想知道:

  1. 我做面向对象编程是为了这样做吗?与只用纯panda编写代码而忘记创建自己的类相比,这有什么优势吗
class Data:
def __init__(self, df):
self._df = df
def clean_dataframe(self):
"""
Does some operation on self._df, eg adds a new column
and sets self._df to the updated dataframe
"""
self._df = some_operations(self._df)

或者只做:

def clean_dataframe(df):
df = some_operations(df)
return df
df = clean_dataframe(df)
  1. 完全不同。一旦我们完成了从数据帧(d0(到数据帧(d1(的转换,从面向对象的意义上讲,我是否需要为d1创建一个新的类,因为底层数据帧已经更改(例如,添加了一个新列(。在同一个例子中,请注意,我们重新定义了自我_在clean_dataframe方法之后的df
    我应该更改此变量,还是应该创建一个新变量,甚至一个新类来表示转换后的数据

这是面向对象设计的新手,希望获得更多的视角。

编译几个用于数据处理的辅助函数肯定是有意义的,尤其是在需要重复使用的情况下。我不太确定创建一个Data类是否提供了任何精致的优势,除非有其他对象想要";束";ala C型结构。

也就是说,为了建模的目的,当现成的估计量似乎不够时,人们可能会经常求助于编写定制的估计量。

关于2,在我看来,您不需要创建一个单独的数据帧,特别是如果唯一的区别是一个额外的列。不过,作为一个警示,我偶尔会遇到一个问题,那就是数据帧变得过于笨重,这甚至可能影响IDE的性能。但这也取决于原始数据帧的数据类型和大小。

最新更新