2017-04-04 6 views
1

私はClass Blahを持っています。それから、配列に格納された何千ものオブジェクトをインスタンス化します。私はそれをパンダのデータフレームに保存したいと思います。 配列をdfに簡単に変換できますが、問題はありません。しかし、無駄です!行を外部定義されたクラスのインスタンスとして扱いますか?

私がしたいのは、DFのすべての行をクラスBlahの別のオブジェクトとして扱うことです。このようにして、より洗練された操作を行う独自のメソッドを作成できます。

f.e:

for row in df : 
    row.blah_method() 

はとして外部で定義されたクラスのすべての行を治療する方法はあります。


これは私の持つ最良のケースのようです! pd.DataFramepd.Seriespd.Seriesあるので

class Blah: 

    def __init__(self, row): 
     self.row = row 

    def say(self) : print self.row 


for row in df.iterrows() : Blah(row).say() 

答えて

1

あなたはpd.DataFrameの運の出ています。すべての列は別のpd.Seriesと解釈されます。これがなければ、まあ、全体のコンセプトはpd.DataFrameです...

しかし! pd.Seriesを使って、あなたが望むことをすることができます。私の玩具classを考えてみましょう。シリーズでどのように使うことができますか?

class blah(object): 
    def __init__(self, i): 
     self.value = i 

    def __add__(self, other): 
     return blah(self.value + 2 * other.value) 

    def __repr__(self): 
     return str(self.value) 

    def blah_method(self): 
     return "Look at me <<<{}>>>".format(self.value) 

a = blah(1) 
b = blah(3) 

a + b 

7 

今度はpd.Series

s = pd.Series([blah(1), blah(3), blah(-4), blah(7)]) 

s.sum() 

13 

を作ってみようと!私はあなたのポイントを参照してくださいapply

s.apply(blah.blah_method) 

0  Look at me <<<1>>> 
1  Look at me <<<3>>> 
2 Look at me <<<-4>>> 
3  Look at me <<<7>>> 
dtype: object 

反復処理

for k, v in s.iteritems(): 
    print(v.blah_method()) 

Look at me <<<1>>> 
Look at me <<<3>>> 
Look at me <<<-4>>> 
Look at me <<<7>>> 
+0

を使用してsum

type(s.sum()) __main__.blah 

の種類を見てください。それは私が他のDF機能を使用したいので駄目です。 – user1019129

+0

@ user1019129これが役に立つと投票してもらえますか?また、あなたがしたいことの具体的な質問をしてください。 – piRSquared

関連する問題