2016-11-29 17 views
0

が必要になります。、私は次のコードを実行しようとしている代替

私は次のエラーを与える
start_time = time.time() 
csvWriter = ModalitySessions.pivot(index='session_id', columns='context_eid', values='name') 
print("--- %s seconds ---" % (time.time() - start_time)) 

:私はオンライン同様の問題を発見した

ValueError: negative dimensions are not allowed 

とそれは基本的なメモリの問題かもしれないように思えた。だから私は、データのサブセットで同じコードを実行しようとしました。それは確かに、メモリの問題です。更新されたコードは次のとおりです。

start_time = time.time() 
csvWriter = ModalitySessions.iloc[:2000000].pivot(index='session_id', columns='context_eid', values='name') 
print("--- %s seconds ---" % (time.time() - start_time)) 

これは私にMemoryErrorを与えます。

これを修正する方法はありますか?私は約3.5百万回のセッションを扱っており、ピボットは約900列を返します。

+3

「ModalitySessions」は何ですか? – user2357112

答えて

1

元のデータを小さなチャンクに分割し、それぞれのピボットの結果を別のコンテナに追加して、空にすることができます。もちろん、フラグメントを追加するこのプロセスを扱う関数が必要です。のように、あなたが構築しているコンテナテーブルの要素を繰り返し処理し、ちょうど処理されたチャンクで構成された新たにピボットされたテーブルの要素と比較し、列フィールドが一致すれば値を追加するもの。非常に効率的ではありませんが(計算時間に関して)、最初のテーブルを分割するチャンクの数に応じて、一度に小さなデータを扱うことになるので、あなたの問題を語ります。ラップアラウンドエラーのようなものです。

+0

ありがとう、私はこの方法を試してみます。また、session_id、 'context_eid'をshortint(デフォルトでは3つのマッピングを作成して別の場所に保存)で置き換えることができるかどうか、文字列のデータ型がshortintなどと比べてもっと多くのメモリを取ることを考慮しています。その経験は何ですか?それはまともなアイデアのように聞こえるかどうかについての一般的なコメント? – Patthebug

+0

はい、そうすることができます。新しいデータ型は理論的にはメモリの占有量が少なくなります。値の範囲を短くしてください。ただし、ハッシュマップの実装によっては、作成するハッシュマップ全体と各行の要素を比較する必要があるかもしれません。本質的には、実際にはコンピューティングで時々起こるディレマを扱っています。空間の複雑さ(大量のメモリが必要)や時間の複雑さ(膨大な時間)があります。 –

+1

コメントを編集できますか?私の英語は恐ろしいものでした... –

関連する問題