Pandas管道抛出错误,将df作为参数传递
理想情况下,管道默认情况下应该将数据帧作为参数,这在我的情况下不会发生。
class Summary:
def get_src_base_df(self):
<do stuff>
return df
@staticmethod
def sum_agg(df):
cols = 'FREQUENCY_ID|^FLAG_'
df = (df.filter(regex=cols).fillna(0)
.groupby('FREQUENCY_ID').agg(lambda x: x.astype(int).sum()))
return df
# few other @static methods
def get_src_df(self):
df = self.get_src_base_df().pipe(self.sum_agg()) #pipe chain continues
# --> error: sum_agg() missing 1 required positional argument: 'df'
# but the below line works
# df = self.get_src_base_df().pipe((lambda x: self.sum_agg(x))) #pipe chain continues
通过执行self.sum_agg()
,您正在调用sum_agg
函数(Python中的@staticmethod
与函数几乎没有区别(,由于它在该调用中没有参数,因此它理所当然地失败了。您需要传递函数对象,而不是函数返回的值。
改为:
def get_src_df(self):
df = self.get_src_base_df().pipe(self.sum_agg) # note: no parentheses