2014-12-27 37 views
10

tôi đã quản lý để thực hiện điều này bằng:Xây dựng Pandas DataFrame từ điển ở dạng {index: danh sách các giá trị hàng}

dft = pd.DataFrame.from_dict({ 
        0: [50, 45, 00, 00], 
        1: [53, 48, 00, 00], 
        2: [56, 53, 00, 00], 
        3: [54, 49, 00, 00], 
        4: [53, 48, 00, 00], 
        5: [50, 45, 00, 00] 
        }, orient='index' 
        ) 

Xong như thế này, các nhà xây dựng trông giống như DataFrame làm cho nó dễ đọc/chỉnh sửa:

>>> dft 
    0 1 2 3 
0 50 45 0 0 
1 53 48 0 0 
2 56 53 0 0 
3 54 49 0 0 
4 53 48 0 0 
5 50 45 0 0 

Nhưng DataFrame.from_dict constructor không có một tham số cột, vì vậy đưa ra các cột tên hợp lý có một bước bổ sung:

dft.columns = ['A', 'B', 'C', 'D'] 

Điều này có vẻ khó khăn cho một tiện ích như vậy (ví dụ: để kiểm tra đơn vị) cách khởi tạo DataFrames.

Vì vậy, tôi tự hỏi: có cách nào tốt hơn không?

Trả lời

8

Hoặc bạn có thể sử dụng DataFrame.from_items() để tạo DataFrame từ từ điển của mình; điều này cho phép bạn chuyển vào các tên cột cùng một lúc.

Ví dụ, nếu d là từ điển của bạn:

d = {0: [50, 45, 0, 0], 
    1: [53, 48, 0, 0], 
    2: [56, 53, 0, 0], 
    3: [54, 49, 0, 0], 
    4: [53, 48, 0, 0], 
    5: [50, 45, 0, 0]} 

Dữ liệu được d.items() và định hướng lại là 'index'. Các phím điển trở thành các giá trị chỉ số:

>>> pd.DataFrame.from_items(d.items(), 
          orient='index', 
          columns=['A','B','C','D']) 
    A B C D 
0 50 45 0 0 
1 53 48 0 0 
2 56 53 0 0 
3 54 49 0 0 
4 53 48 0 0 
5 50 45 0 0 

Trong Python 2 bạn có thể sử dụng d.iteritems() để mang lại các nội dung của từ điển để tránh tạo ra một danh sách trong bộ nhớ.

5

Một cách để làm điều đó là như sau:

df = pd.DataFrame.from_dict({ 
0: {"A":50, "B":40}, 
1: {"A":51, "B":30}}, orient='index') 

Tuy nhiên, để khởi tạo kiểm tra nhanh chóng có lẽ tôi sẽ thích theo cách của bạn + sau đó thiết lập các cột.

1

Bạn có thể thử:

x=pd.DataFrame({0:[50,45],1:[53,48],2:[56,53]}, index=["A","B"]).transpose() 

Nhưng nó vẫn lẻ như bạn đang xác định các chỉ số tiêu chuẩn như là chìa khóa cho từ điển của bạn.

Tại sao không trực tiếp

x = pd.DataFrame({"A":[50,53,56],"B":...}) 
+0

"Tại sao không trực tiếp x = pd.DataFrame ({" A ": [50,53,56]," B ": ...})"? Chỉ để giữ các con số trong initialisation ở các vị trí giống như df, như câu hỏi đề cập đến ... – birone

+0

Các khóa chỉ mục chuẩn chỉ là phần giữ chỗ, để giữ cho ví dụ đơn giản. Có lẽ tôi sẽ cần phải sử dụng các đối tượng datetime. – birone

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