2016-01-25 19 views
10

私はので、私はより多くの、それで遊ぶことができ、データフレームにこれを変換する配列は、このモデルオブジェクトのリストをpandasデータフレームに変換するには?

[CancerDataEntity(age=u'80-85+', gender=u'Female', cancer=u'All cancers (C00-97,B21)', deaths=15306), CancerDataEntity(... 

のように見える、印刷されたこのクラス

class CancerDataEntity(Model): 

    age = columns.Text(primary_key=True) 
    gender = columns.Text(primary_key=True) 
    cancer = columns.Text(primary_key=True) 
    deaths = columns.Integer() 
    ... 

のオブジェクトの配列を持っています私に適した方法 - 集計、集計、合計など。私が見て、このデータフレームを望むどのよう は、このようなものになるだろう:

 age  gender  cancer  deaths 
0 80-85+ Female  ...  15306 
1 ... 

手動で入力配列を処理せず、簡単にnumpyの/パンダを使用してこれを達成する方法はありますか?

答えて

11

コード:

variables = arr[0].keys() 
df = pd.DataFrame([[getattr(i,j) for j in variables] for i in arr], columns = variables) 

おかげで正しい方向に私を指しているため@Serbitarします。

5

試み:希望する結果につながる

variables = list(array[0].keys()) 
dataframe = pandas.DataFrame([[getattr(i,j) for j in variables] for i in array], columns = variables) 
+1

http://meta.stackoverflow.com/questions/262695/new-answer-deletion-option-code-only-answer –

+0

私はそれを微調整しなければならなかったので、私は本当のような答えを受け入れるべきではないと思います私はそれが正しい方向に向いているので、それを動作させるが、私はそれを上書きしている。 – ezamur

11

これまでに多くのきれいな方法は、あなたのクラスにto_dictメソッドを定義し、使用することですpandas.DataFrame.from_records

class Signal(object): 
    def __init__(self, x, y): 
     self.x = x 
     self.y = y 

    def to_dict(self): 
     return { 
      'x': self.x, 
      'y': self.y, 
     } 

例えば

In [87]: signals = [Signal(3, 9), Signal(4, 16)] 

In [88]: pandas.DataFrame.from_records([s.to_dict() for s in signals]) 
Out[88]: 
    x y 
0 3 9 
1 4 16 
+1

すばらしい答え!しかし、私は 'from_records'を使わないと同じ結果が得られることに注意してください:' pandas.DataFrame(シグナルのsのためのs.to_dict()) ' – ChaimG

+0

' __dict__'トリッキーを持たない単純なクラスの場合、 'pandas.DataFrame(シグナル内のvars(s))' 'カスタム' to_dict'関数を実装しません。 –

関連する問題