2017-04-04 32 views
0

次のコードを使用して2つのExcelファイルをマージしようとしましたが、 "ValueError:配列が大きすぎます; arr.size * arr.dtype.itemsizeが最大サイズより大きくなりました"というエラーが発生しました。ValueError:配列が大きすぎます

import pandas as pd 

file1 = pd.read_excel("file1.xlsx") 
file2 = pd.read_excel("file2.xlsx") 

file3 = file1.merge(file2, on="Input E-mail", how="outer") 

file3.to_excel("merged1.xlsx") 

ファイルサイズは〜100メガバイトは+〜100メガバイト、利用可能なRAMはあなたの結果のデータフレームは、あなたの二つの入力のものよりもはるかに大きくすることができる(16ギガバイトの)9ギガバイト

+2

あなたは、64ビットのPythonを使用していますか? – zmbq

+0

現在32ビットを使用しています。 – Nivas

+0

64ビットに切り替えます。 – zmbq

答えて

1

です。簡単な例:

import pandas as pd 

values = pd.DataFrame({"id": [1,1,1,1], "value": ["a", "b", "c", "d"]}) 

users = pd.DataFrame({"id": [1,1,1], "users": ["Amy", "Bob", "Dan"]}) 

big_table = pd.merge(users, values, how="outer") 

print big_table 

結果:

 id users value 
0  1 Amy  a 
1  1 Amy  b 
2  1 Amy  c 
3  1 Amy  d 
4  1 Bob  a 
5  1 Bob  b 
6  1 Bob  c 
7  1 Bob  d 
8  1 Dan  a 
9  1 Dan  b 
10 1 Dan  c 
11 1 Dan  d 
+0

お返事ありがとうございます。これは意図されたもので、私があなたが説明した結果を正確に探していますが、ファイルサイズが100MBなので「配列が大きすぎます」というエラーが出ています。これを解決するのを手伝ってもらえますか? – Nivas

+0

@ user3783174マージされたデータフレーム全体が必要な場合、この問題を解決する唯一の方法は、RAMを増やすことです。しかし、それはすべて必要ですか?おそらく、マージする前に最も関心のある行をフィルタリングできますか? – Akavall

+0

残念ながらはい。私はすべてのデータが必要です。あなたは私に必要なRAMを教えてもらえますか? – Nivas

関連する問題