2014-04-26 30 views
8

tôi có một danh sách của mỗi với các phím cùng Python dict s,Chuyển đổi một danh sách các dicts đến một dataframe Pandas

dict_keys= ['k1','k2','k3','k4','k5','k6'] # More like 30 keys in practice 
data = [] 
for i in range(20): # More like 3000 in practice 
    data.append({k: np.random.randint(100) for k in dict_keys}) 

và muốn sử dụng nó để tạo ra một Pandas dataframe tương ứng với một tập hợp con của phím. Cách tiếp cận hiện tại của tôi là phải uống mỗi dict từ danh sách cùng một lúc và thêm nó vào dataframe sử dụng

df = pd.DataFrame(columns=['k1','k2','k5','k6']) 
for d in data: 
    df = df.append({k: d[k] for k in list(df.columns)}, ignore_index=True) 
    # In practice, there are some calculations on some of the values here 

nhưng đây là rất chậm (danh sách thực tế, và dicts nó chứa, cả hai đều khá lớn).

Có phương pháp nào tốt hơn, nhanh hơn (và thành ngữ hơn) để lặp qua danh sách các từ điển và thêm chúng dưới dạng hàng vào một khung dữ liệu Pandas không?

Trả lời

12

Chỉ cần vượt qua data tới DataFrame 's __init__ hoặc tới DataFrame.from_records (hoặc sẽ hoạt động).

Bạn cũng có thể muốn đặt chỉ mục, ví dụ: DataFrame.from_records(data, index = 'k1').

Nếu bạn cũng cần thực hiện một số phép tính, thường dễ dàng hơn và thuận tiện hơn để thực hiện việc đó trên DataFrame, sau khi tạo. Tận dụng gấu trúc!

+1

Wow, 'from_records' là * nhanh *! – orome

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