2016-06-26 6 views
1

パンダを使って約3GB、200Kb、200kbの3つのファイルをマージしようとしましたが、コンピュータには32Gメモリがありますが、それでもMemoryErrorで終了します。この問題を回避する方法はありますか?私のマージコードは以下の通りです:あなたはprocess_product.csvから(必要性)Info列を使用していないので、それを読んでする必要はありませんパンダでのメモリ使用を最適化する方法

:ここ

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圧縮し、どこかにそれらをアップロードし、ここにリンクを投稿してもらえますか?もちろん、データが賢明でない場合(顧客情報、電子メールなどは含まれません)。 16GBのRAMを搭載したノートブックで最適化しようとする可能性があります – MaxU

答えて

1

は私の「マイクロ」-optimizationの試みであります:

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パラメータを使用します。

私は/ DFが最大の1(32ギガバイト)で、どのファイルか分からないので、私はそれがだとassumtionを作っ

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を:

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) 

はできるだけ早くメモリからtown_stateを削除し、result DFに保存しようtrain DF。それはproduct 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 
関連する問題