方法链接和方法返回值
Method chaining and returning value from method
这是一个关于 Python class 方法链的一般性问题。我有一个 class 执行一些数据整理操作和 returns 一个用于方法的数据框。我正在尝试在创建数据框对象后使用方法链,就像 Pandas 一样。但是,我似乎 运行 遇到了一些问题。这是 class:
中几个方法的简单示例
class Data:
def __init__(self, df):
self.df = df
def remove_rows(self, col):
df = (perform_some_operations)
return df
def collapse(self, cols):
df = (perform_some_operations)
return df
所以我可以这样使用它:
df = Data(df)
df = df.remove_rows(col_1)
df = df.collapse(col_1)
但是,如果我想像这样使用它:
df = df.remove_rows(col_1).collapse(col_1)
我会得到错误。现在,如果我从这些方法返回 self
,我可以将它们链接在一起,但输出是 Data
对象而不是数据帧。
在 Pandas
中,您可以执行以下操作:
df = pd.read_csv('data.csv')
df = df.rename(columns={'col_1':'COL_1'}).drop(columns=['COL_1'])
还有
df = df.rename(columns={'col_1':'COL_1'})
df = df.drop(columns=['COL_1'])
我想了解如何创建既允许我进行链式操作又允许我在需要时单独使用它们来获取值的方法。我做了一些研究,看起来你可以做一个或另一个,但如果你以 Pandas
为例,你可以两者都做。
您需要在方法中使用 self.df
像这样:
class Data:
def __init__(self, df):
self.df = df
def remove_rows(self, col):
self.df = (perform_some_operations)
return self.df
def collapse(self, cols):
self.df = (perform_some_operations)
return self.df
这是一个关于 Python class 方法链的一般性问题。我有一个 class 执行一些数据整理操作和 returns 一个用于方法的数据框。我正在尝试在创建数据框对象后使用方法链,就像 Pandas 一样。但是,我似乎 运行 遇到了一些问题。这是 class:
中几个方法的简单示例class Data:
def __init__(self, df):
self.df = df
def remove_rows(self, col):
df = (perform_some_operations)
return df
def collapse(self, cols):
df = (perform_some_operations)
return df
所以我可以这样使用它:
df = Data(df)
df = df.remove_rows(col_1)
df = df.collapse(col_1)
但是,如果我想像这样使用它:
df = df.remove_rows(col_1).collapse(col_1)
我会得到错误。现在,如果我从这些方法返回 self
,我可以将它们链接在一起,但输出是 Data
对象而不是数据帧。
在 Pandas
中,您可以执行以下操作:
df = pd.read_csv('data.csv')
df = df.rename(columns={'col_1':'COL_1'}).drop(columns=['COL_1'])
还有
df = df.rename(columns={'col_1':'COL_1'})
df = df.drop(columns=['COL_1'])
我想了解如何创建既允许我进行链式操作又允许我在需要时单独使用它们来获取值的方法。我做了一些研究,看起来你可以做一个或另一个,但如果你以 Pandas
为例,你可以两者都做。
您需要在方法中使用 self.df 像这样:
class Data:
def __init__(self, df):
self.df = df
def remove_rows(self, col):
self.df = (perform_some_operations)
return self.df
def collapse(self, cols):
self.df = (perform_some_operations)
return self.df