2016-06-26 3 views
1

팬더를 사용하여 약 3GB, 200Kb 및 200kb 인 3 개의 파일을 병합하려고하고 컴퓨터에 32G 메모리가 있지만 여전히 MemoryError로 끝납니다. 이 문제를 피할 수있는 방법이 있습니까?팬더에서 메모리 사용을 최적화하는 방법

다음
product = pd.read_csv("../data/process_product.csv", header=0) 
product["bandID"] = pd.factorize(product.Band)[0] 
product = product.drop('Band', 1) 
product = product.drop('Info', 1) 

town_state = pd.read_csv("../data/town_state.csv", header=0) 
dumies = pd.get_dummies(town_state.State) 
town_state = pd.concat([town_state, dumies], axis=1) 
town_state["townID"] = pd.factorize(town_state.Town)[0] 
town_state = town_state.drop('State', 1) 
town_state = town_state.drop('Town', 1) 
train = pd.read_csv("../data/train.csv", header=0) 

result = pd.merge(train, town_state, on="Agencia_ID", how='left') 
result = pd.merge(result, product, on="Producto_ID", how='left') 
result.to_csv("../data/train_data.csv") 
+0

당신이 당신의 파일을 gzip을 여기 어딘가에 업로드 및 링크를 게시 할 수 : 그것은 product DF을의 경우, 나는 이런 식으로 할 것인가? 물론 데이터가 합리적이지 않은 경우 (고객 정보, 전자 메일 등을 포함하지 않음). 16GB RAM이있는 노트북에서 최적화 할 수 있습니다. – MaxU

답변

1

내 "마이크로"- 최적화의 시도이다 : 내 병합 아래 코드는 당신이 (필요)가 process_product.csv에서 Info 열을 사용하지 않는

, 그래서 그것을 읽을 필요가 없습니다 :

cols = [<list of columns, EXCEPT Info column>] 
product = pd.read_csv("../data/process_product.csv", usecols=cols) 
product['Band'] = pd.factorize(product.Band)[0] 
product.rename(columns={'Band':'bandID'}, inplace=True) 

우리가 dumies 변수에 어떤 메모리를 절약을 시도 할 수 있습니다 -에 - 더 - 플라이 get_dummies()를 사용하고 sparse=True 매개 변수를 사용

town_state = pd.concat([town_state, pd.get_dummies(town_state.State, sparse=True)], axis=1) 
del town_state['State'] 
town_state['Town'] = pd.factorize(town_state.Town)[0] 
town_state.rename(columns={'Town':'townID'}, inplace=True) 

시도는, result DF에 저장 최대한 빨리 메모리에서 town_state을 제거 :

train = pd.merge(train, town_state, on="Agencia_ID", how='left') 
del town_state 
train = pd.merge(train, product, on="Producto_ID", how='left') 
del product 

PS 내가/DF 가장 큰 하나 (32기가바이트)인지 파일 모르는, 그래서 내가 그건한다는 assumtion했다 train DF.

product = pd.merge(train, product, on="Producto_ID", how='left') 
del train 
product = pd.merge(product, town_state, on="Agencia_ID", how='left') 
del town_state 
관련 문제