在类中使用数据框来过滤结果
我创建了一个类来预处理带有熊猫数据框的文档。但是,我在课堂上使用过滤器时遇到问题。我的代码如下:在类中使用数据框来过滤结果
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
我的输出始终是未过滤的结果。我的输入文件有262,000条记录,当使用过滤器时,在我的课程外部调用时,它成功地将我的df过滤到11,000条记录。任何想法为什么它不会在课堂上过滤?
你的问题可能是你正在使用的变量“DF”初始化数据框类,但是变量DF尚未定义...
你这样做方式错误。你是从数据框中继承的,但是你将数据存储在一个特殊的数据框属性中。没有bueno。
如果你想让一个像数据框一样庸俗的类,但是你想添加一些不可用的其他行为,你应该继承子类。
如果你想继承,你应该做这样的:
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没有继承DataFrame。在你的例子中,你不是继承DataFrame的,所以'super'不会像你所描述的那样。 – SethMMorton
啊...我现在看到了(这也解释了为什么我没有子类,因为我只是复制/粘贴代码)。显然,我简单地假设*任何创建一个名为Dataframe的类都会这样做来为大熊猫DataFrame子类化,因为为什么你会创建一个类并将其命名为几乎相同的东西? –
你不会从'filter_priv'返回任何东西。这是你的意图吗? – SethMMorton