2016-01-25 21 views
10

Ben bu yüzden bir daha onunla oynayabileceği bir veri çerçevesine bu dönüştürmek istediğiniz dizisi buModel nesnelerinin listesini pandalar veri alanına dönüştürme nasıl yapılır?

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

benziyor, baskılı Bu sınıfa

class CancerDataEntity(Model): 

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

ait nesneler dizisi var bana uygun bir yol - toplama, sayma, toplam ve benzerleri. Ben bakmak için bu veri çerçevesini diliyorum nasıl , böyle bir şey olurdu:

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

elle giriş dizisi işlemeden, kolayca numpy/pandaların kullanarak bunu başarmak için bir yol var mı?

cevap

11

Kodu:

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

sayesinde doğru yönde beni işaret için @Serbitar için.

5

deneyin: İstenilen sonuca yol açar

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

Ben bunu çimdik vardı ben de doğru cevabı kabul etmemesi gerektiğini tahmin Çalıştırmak için ama doğru yöne işaret ettiğinden onu alıyorum. – ezamur

11

bu için bir daha temiz bir şekilde sınıfın bir to_dict yöntemi tanımlar ve daha sonra kullanmak için 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, 
     } 

ör

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

Harika cevap! Bununla birlikte, "from_records": pandas.DataFrame ([s.to_dict() 'ın sinyallerde s) kullanmadan aynı sonuçları aldığımı unutmayın. '' – ChaimG

+0

Herhangi bir '__dict__' hile içermeyen basit sınıflar için, bu basitleştirilebilir. pandas.DataFrame (['lerde sinyaller için vars (ler)] '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' 'fonksiyonunu uygulamadan' '' işlevine getirin –

İlgili konular