2014-05-09 88 views
11

Tôi đang cố gắng đọc trong bộ dữ liệu hơi lớn sử dụng các chức năng panda s read_csv hoặc read_stata, nhưng tôi tiếp tục chạy vào Memory Error s. Kích thước tối đa của một khung dữ liệu là gì? Sự hiểu biết của tôi là các khung dữ liệu sẽ không sao miễn là dữ liệu phù hợp với bộ nhớ, điều này không phải là vấn đề đối với tôi. Điều gì khác có thể gây ra lỗi bộ nhớ?Kích thước tối đa của khung dữ liệu gấu trúc

Đối với ngữ cảnh, tôi đang cố gắng đọc trong Survey of Consumer Finances 2007, cả ở định dạng ASCII (sử dụng read_csv) và ở định dạng Stata (sử dụng read_stata). Các tập tin là khoảng 200MB như dta và khoảng 1,2 GB như ASCII, và mở nó trong Stata nói với tôi rằng có 5.800 biến/cột cho 22.000 quan sát/hàng.

+1

Bản sao có thể có của http://stackoverflow.com/questions/11622652/large-persistent-dataframe-in-pandas Hãy thử điều đó để tham chiếu –

+5

bạn có đang chạy trình băm 32 bit không? – Jeff

+3

Tôi đọc trong cả hai phiên bản 'csv' và phiên bản' dta'. Cả hai đều làm việc tốt với python/pandas 64 bit 0.13.1. Sử dụng bộ nhớ cao nhất cho tệp 'csv' là 3.33G và đối với' dta' là 3.29G. Đó là quyền trong khu vực nơi một phiên bản 32-bit có khả năng bị nghẹt thở. Vì vậy, câu hỏi của Jeff là rất tốt. –

Trả lời

4

Tôi sẽ đăng câu trả lời này như đã được thảo luận trong nhận xét. Tôi đã nhìn thấy nó xuất hiện nhiều lần mà không có câu trả lời được chấp nhận.

Lỗi bộ nhớ trực quan - hết bộ nhớ. Nhưng đôi khi các giải pháp hoặc gỡ lỗi của lỗi này là bực bội vì bạn có đủ bộ nhớ, nhưng lỗi vẫn còn.

1) Kiểm tra các lỗi mã

Đây có thể là một "bước câm" nhưng đó là lý do tại sao nó là đầu tiên. Hãy chắc chắn rằng không có vòng lặp vô hạn hoặc điều mà cố ý sẽ mất một thời gian dài (như sử dụng một cái gì đó module os rằng sẽ tìm kiếm toàn bộ máy tính của bạn và đưa ra trong một file excel)

2) làm cho mã của bạn hiệu quả hơn

Đi dọc theo các bước của Bước 1. Nhưng nếu một điều đơn giản là mất nhiều thời gian, thường có một mô-đun hoặc cách tốt hơn để làm điều gì đó nhanh hơn và hiệu quả bộ nhớ hơn. Đó là vẻ đẹp của Python và/hoặc ngôn ngữ nguồn mở!

3) Kiểm tra tổng bộ nhớ của đối tượng

Bước đầu tiên là để kiểm tra bộ nhớ của một đối tượng. Có rất nhiều chủ đề trên Stack về điều này, vì vậy bạn có thể tìm kiếm chúng. câu trả lời phổ biến là herehere

để tìm kích thước của một đối tượng trong cắn bạn luôn có thể sử dụng sys.getsizeof():

import sys 
print(sys.getsizeof(OBEJCT_NAME_HERE)) 

Bây giờ các lỗi có thể xảy ra trước khi bất cứ điều gì được tạo ra, nhưng nếu bạn đọc csv trong khối bạn có thể thấy dung lượng bộ nhớ đang được sử dụng cho mỗi đoạn.

4) Kiểm tra bộ nhớ khi chạy

Đôi khi bạn có đủ bộ nhớ nhưng các chức năng bạn đang chạy tiêu tốn rất nhiều bộ nhớ khi chạy. Điều này làm cho bộ nhớ tăng đột biến vượt quá kích thước thực tế của đối tượng đã hoàn thành khiến cho mã/quy trình bị lỗi. Kiểm tra bộ nhớ trong thời gian thực là dài nhưng có thể thực hiện được. Ipython là tốt với điều đó. Kiểm tra Their Document.

sử dụng mã dưới đây để xem tài liệu thẳng vào Jupyter Máy tính xách tay:

%mprun? 
%memit? 

mẫu sử dụng:

%load_ext memory_profiler 
def lol(x): 
    return x 
%memit lol(500) 
#output --- peak memory: 48.31 MiB, increment: 0.00 MiB 

Nếu bạn cần giúp đỡ về chức năng kỳ diệu This is a great post

5) này một có thể là đầu tiên .... nhưng Kiểm tra những điều đơn giản như bit phiên bản

Như trong trường hợp của bạn, việc chuyển đổi đơn giản phiên bản python mà bạn đang chạy đã giải quyết được vấn đề.

Thông thường các bước trên giải quyết được sự cố của tôi.

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