Python 在类中使用dataframe筛选结果
我创建了一个类来预处理带有数据帧的文档。但是,我在类中使用过滤器时遇到了问题。我的代码如下:Python 在类中使用dataframe筛选结果,python,python-2.7,pandas,Python,Python 2.7,Pandas,我创建了一个类来预处理带有数据帧的文档。但是,我在类中使用过滤器时遇到了问题。我的代码如下: class Dataframe: def __init__(self, my_dataframe): self.my_dataframe = my_dataframe self.my_dataframe = self.filter_priv() def filter_priv(self): df = self.my_dataframe.c
class Dataframe:
def __init__(self, my_dataframe):
self.my_dataframe = my_dataframe
self.my_dataframe = self.filter_priv()
def filter_priv(self):
df = self.my_dataframe.copy()
df = df[~(df.priv_id > -1) | ~(df.restriction_level > 0)]
df1 = Dataframe(df)
df
我的输出总是非过滤结果。我的输入文件有262000条记录,使用过滤器,当在我的类外调用时,它成功地将我的df过滤到11000条记录。你知道为什么它不在课堂上过滤吗 您的问题可能是使用变量“df”初始化数据帧类,但变量df尚未定义…您的问题可能是使用变量“df”初始化数据帧类,但变量df尚未定义…您这样做是错误的。您正在从dataframe进行子类化,但随后将数据存储在一个特殊的dataframe属性中。不,布埃诺 如果您想要有一个像dataframe一样嘎嘎作响的类,但是您想要添加一些其他不可用的行为,那么您应该进行子类化 如果您想要子类化,您应该这样做:
class Dataframe(DataFrame):
def __init__(self, *args, **kwargs):
super(Dataframe, self).__init__(*args, **kwargs)
def filter_priv(self):
return self[~(self.priv_id > -1) | ~(self.restriction_level > 0)]
# Not sure if you can create a dataframe from another
df1 = Dataframe(df)
但这甚至可能不是你想要的。最好是:
def filter_priv(df):
return df[~(df.priv_id > -1) | ~(df.restriction_level > 0)]
df1 = filter_priv(df)
你这样做是不对的。您正在从dataframe进行子类化,但随后将数据存储在一个特殊的dataframe属性中。不,布埃诺
如果您想要有一个像dataframe一样嘎嘎作响的类,但是您想要添加一些其他不可用的行为,那么您应该进行子类化
如果您想要子类化,您应该这样做:
class Dataframe(DataFrame):
def __init__(self, *args, **kwargs):
super(Dataframe, self).__init__(*args, **kwargs)
def filter_priv(self):
return self[~(self.priv_id > -1) | ~(self.restriction_level > 0)]
# Not sure if you can create a dataframe from another
df1 = Dataframe(df)
但这甚至可能不是你想要的。最好是:
def filter_priv(df):
return df[~(df.priv_id > -1) | ~(df.restriction_level > 0)]
df1 = filter_priv(df)
但是OP不是数据帧的子类。在您的示例中,您没有对数据帧进行子类化,因此
super
不会像您描述的那样。。。我现在明白了(这也解释了为什么我没有子类化,因为我只是复制/粘贴了代码)。显然,我只是假设任何创建一个名为Dataframe
的类的人都会将pandasDataframe
子类化,因为为什么还要创建一个类并将其命名为几乎相同的东西呢?但OP并不是将Dataframe子类化。在您的示例中,您没有对数据帧进行子类化,因此super
不会像您描述的那样。。。我现在明白了(这也解释了为什么我没有子类化,因为我只是复制/粘贴了代码)。显然,我只是假设任何创建一个名为Dataframe
的类的人都会这样做来对pandasDataframe
进行子类化,因为为什么还要创建一个类并将其命名为几乎相同的东西呢?您不会从filter\u priv
返回任何内容。这是您的意图吗?您不会从filter\u priv
返回任何内容。这是你的意图吗?