2016-01-25 34 views
10

Tôi có một mảng các đối tượng của lớp nàyLàm thế nào để chuyển đổi danh sách các đối tượng mô hình sang khung dữ liệu pandas?

class CancerDataEntity(Model): 

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

Khi in, mảng trông như thế này

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

Tôi muốn chuyển đổi này vào một khung dữ liệu vì vậy tôi có thể chơi với nó trong một hơn cách phù hợp với tôi - để tổng hợp, đếm, tổng hợp và tương tự. Làm thế nào tôi muốn khung dữ liệu này để tìm kiếm, sẽ là một cái gì đó như thế này:

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

Có cách nào để đạt được điều này bằng NumPy/gấu trúc dễ dàng, mà không tự xử lý các mảng đầu vào?

Trả lời

11

Mã dẫn đến kết quả mong muốn:

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

Nhờ @Serbitar đã chỉ cho tôi để đi đúng hướng.

5

thử:

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

Tôi đoán tôi không nên chấp nhận câu trả lời là đúng vì tôi đã phải tinh chỉnh nó để làm cho nó hoạt động nhưng tôi đang upvoting nó vì nó chỉ cho tôi đi đúng hướng. – ezamur

11

Một cách sạch hơn nhiều để đến đây là để xác định một phương pháp to_dict về lớp học của bạn và sau đó sử dụng 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, 
     } 

ví dụ

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

Câu trả lời hay! Tuy nhiên, lưu ý rằng tôi nhận được kết quả tương tự mà không sử dụng 'from_records':' pandas.DataFrame ([s.to_dict() cho s trong các tín hiệu]) ' – ChaimG

+0

Đối với các lớp đơn giản mà không có bất kỳ thủ thuật' __dict__' nào, điều này có thể được đơn giản hóa thành 'pandas.DataFrame ([vars (s) cho s trong các tín hiệu])' mà không thực hiện một hàm 'to_dict' tùy chỉnh. –

Các vấn đề liên quan