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
的类的人都会将pandas
Dataframe
子类化,因为为什么还要创建一个类并将其命名为几乎相同的东西呢?但OP并不是将Dataframe子类化。在您的示例中,您没有对数据帧进行子类化,因此
super
不会像您描述的那样。。。我现在明白了(这也解释了为什么我没有子类化,因为我只是复制/粘贴了代码)。显然,我只是假设任何创建一个名为
Dataframe
的类的人都会这样做来对pandas
Dataframe
进行子类化,因为为什么还要创建一个类并将其命名为几乎相同的东西呢?您不会从
filter\u priv
返回任何内容。这是您的意图吗?您不会从
filter\u priv
返回任何内容。这是你的意图吗?