2016-07-25 7 views
1

私は、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.copy() 
     df = df[~(df.priv_id > -1) | ~(df.restriction_level > 0)] 

df1 = Dataframe(df) 

df 

私の出力は常にフィルタリングされていない結果です。私の入力ファイルは262,000個のレコードを持っていて、フィルターを使用して私のクラスの外で呼び出されたとき、私のdfは11,000個のレコードまで正常にフィルタリングされます。クラスでフィルタリングしない理由は何ですか?

+0

あなたは 'filter_priv'から何も返さないでしょう。それはあなたの意図ですか? – SethMMorton

答えて

0

あなたは問題が...

0

を使用すると、データフレームクラスを初期化するために、変数「DF」を使用しているが、変数DFがまだ定義されていないことをあなたがこの道をやっているかもしれませんねが間違っています。あなたはデータフレームからサブクラス化していますが、特殊なデータフレームプロパティ内にデータを格納しています。ブエノはありません。

クラスをデータフレームのようにしたいが、利用できないその他の動作を追加したい場合は、サブクラス化する必要があります。

あなたがサブクラス化したい場合、あなたはこのようにそれをやっている必要があります。

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) 
+0

しかし、OPはDataFrameをサブクラス化していません。あなたの例では、DataFrameをサブクラス化していないので、 'super'はあなたが記述したとおりにはできません。 – SethMMorton

+0

ああ...私はそれを見る(私はサブクラス化しなかった理由を説明している。私はコードをコピー/ペーストしているからだ)。どうやら、クラスを作成して「Dataframe」と呼ばれるクラスを作成する人は誰でも、「DataFrame」をサブクラス化すると思います。 –

関連する問題