2017-05-10 18 views
0

大きなExcelファイルを読むにはopenpyxlnumpyを使用します。コードは、彼らが正常に動作(4メガバイトExcelは16000行と50列を含むファイル)中規模のファイルに対してnumpyは大きな行列のサイズを変更できません

W = load_workbook(fname, read_only = True) 
p = W.worksheets[0] 
a=[] 
m = p.max_row 
n = p.max_column 
for row in p.iter_rows(): 
    for k in row: 
     a.append(k.value) 

# convert list a to matrix (for example 5*6) 
aa= np.resize(a, [m, n]) 

のように見えます。しかし、大きなファイル(2100B 100000行と50列)の場合、numpyはメモリエラーで失敗します。システム上で使用可能なメモリがあります。

1-行列のサイズを変更する際に、どのくらいのメモリが必要でしたか?

2メモリ(Javaではヒープサイズのようなもの)を増やすにはどうすればよいですか?

Traceback (most recent call last): 
    File "exread.py", line 26, in <module> 
    aa= np.resize(a, [m, n]) 
    File "C:\Users\m.naderan\AppData\Local\Programs\Python\Python36\lib\site-packa 
ges\numpy\core\fromnumeric.py", line 1121, in resize 
    a = ravel(a) 
    File "C:\Users\m.naderan\AppData\Local\Programs\Python\Python36\lib\site-packages\numpy\core\fromnumeric.py", line 1468, in ravel 
    return asanyarray(a).ravel(order=order) 
    File "C:\Users\m.naderan\AppData\Local\Programs\Python\Python36\lib\site-packages\numpy\core\numeric.py", line 583, in asanyarray 
    return array(a, dtype, copy=False, order=order, subok=True) 
MemoryError 
+0

これは 'resize'の使用には何がポイントですか?それはめったに必要ありません。 np.arrayを使用して、リストから配列を作成します。 – hpaulj

+0

まあ、私はそれがm * nに配列をすっきりとサイズ変更すると思った。だから、 'np.array'の使い方を教えてください。/ – mahmood

+1

あなたは' aa = np.array(p.rowsのjではi [jのi.value]) ')'最初の2行。 – Nyps

答えて

0
  1. 操作のメモリ使用量をチェックするための最も実用的な方法は、おそらくあなたは、Unixシステムを使っている場合だけtop/htopを見ることであろう。誰かがこの5年前にPython solutionを投稿しました。

  2. 私は間違っているかもしれませんが、デフォルトではPythonカーネルのメモリ使用に制限はないと思います。つまり、MemoryErrorは本当にあなたのシステム全体で十分なメモリがない場合にのみ起こります以前は50GB以上のメモリを消費していたスクリプトを実行しました)。

0

ドキュメントには、clear example of how to convert a worksheet to a dataframeが含まれています。これは使いやすく、自分のコードよりも信頼性が高いので、なぜ使用しないのですか?

+0

例は明確ではありませんが、データフレームの必要性とそれを使用する理由とそれを使用しないとどうなるでしょうか? – mahmood

関連する問題