2012-07-10 34 views
15

Tôi đã kế thừa một tệp dữ liệu được lưu ở định dạng Stata .dta. Tôi có thể tải nó với chức năng scikits.statsmodelsgenfromdta(). Điều này đặt dữ liệu của tôi vào một mảng NumPy 1 chiều, trong đó mỗi mục nhập là một hàng dữ liệu, được lưu trữ trong một bộ 24-bit.Xây dựng một cách hiệu quả Pandas DataFrame từ danh sách lớn các bộ/hàng

In [2]: st_time = time.time(); initialload = sm.iolib.genfromdta("/home/myfile.dta"); ed_time = time.time(); print (ed_time - st_time) 
666.523324013 

In [3]: type(initialload) 
Out[3]: numpy.ndarray 

In [4]: initialload.shape 
Out[4]: (4809584,) 

In [5]: initialload[0] 
Out[5]: (19901130.0, 289.0, 1990.0, 12.0, 199.0, 18.0, 40301000.0, 'GB', 18242.0, -2.368063, 1.0, 1.7783716290878204, 4379.355, 66.17669677734375, -999.0, -999.0, -0.60000002, -999.0, -999.0, -999.0, -999.0, -999.0, 0.2, 371.0) 

Tôi tò mò nếu có cách hiệu quả để sắp xếp việc này vào khung dữ liệu Pandas. Từ những gì tôi đã đọc, việc xây dựng một DataFrame từng hàng có vẻ khá kém hiệu quả ... nhưng các lựa chọn của tôi là gì?

Tôi đã viết một thông báo đầu tiên khá chậm mà chỉ cần đọc từng bộ dữ liệu dưới dạng một DataFrame một hàng và nối thêm nó. Chỉ cần tự hỏi nếu bất cứ điều gì khác được biết là tốt hơn.

+0

Liệu 'pandas.DataFrame (initialload) 'trả lại những gì bạn đang tìm kiếm? – eumiro

+0

Chà. Hầu hết. Nó có một số tên cột, nhưng tôi có thể dễ dàng sửa nó. Khùng. Cảm ơn bạn, tôi sẽ không bao giờ đoán được rằng ngay cả sau khi đọc tài liệu về Pandas. Xin lỗi điều này thật đơn giản. – ely

Trả lời

19

Nếu nhận xét của tôi đã trả lời câu hỏi của bạn, câu trả lời của tôi không có bình luận về nó nữa ... ;-)

pandas.DataFrame(initialload, columns=list_of_column_names) 
3

Version 0.12 của gấu trúc trở đi nên hỗ trợ tải định dạng Stata trực tiếp (Reference).

Từ các tài liệu:

Chức năng cấp cao nhất read_stata sẽ đọc một tập tin định dạng dta và trả về một DataFrame: Các StataReader lớp sẽ đọc header của file dta cho lúc khởi tạo. dữ liệu phương pháp của nó() sẽ đọc những quan sát, chuyển đổi chúng sang một DataFrame mà được trả về:

pd.read_stata('stata.dta') 
Các vấn đề liên quan