1

32 ビット Python で並べ替える必要がある大きな pandas シリーズ (5000 万以上) がありますが、並べ替え中に MemoryError が発生します。パンダのソートアルゴリズムは、ソート中にいくつかの一時的な配列を作成するようです。代わりに numpy のソート アルゴリズムを使用できることはわかっていますが、使用できる pandas API にメモリ フットプリントが小さい代替ソート アルゴリズムはありますか?

4

1 に答える 1

1

2つの可能性

1) これは本質的にソートが行うことですが、一時変数を使用しません (どこかに NaN がある場合、これは機能しないことに注意してください)。

In [1]: s = Series(np.random.rand(10))

In [3]: np.argsort(s.values)
Out[3]: array([8, 0, 1, 3, 9, 6, 2, 7, 5, 4])

In [4]: s[np.argsort(s.values)]
Out[4]: 
8    0.033948
0    0.183882
1    0.236021
3    0.372763
9    0.383721
6    0.489090
2    0.498036
7    0.676246
5    0.709906
4    0.738510
dtype: float64

2) これはまだ実装されていませんが、HDFStore テーブルに書き込むことができます。ソートされた順序で読み戻す readSorted メソッドがあります。方法 1) を試してください。それがうまくいかない場合は、これを行うための小さなスクリプトを提供できます。

于 2013-04-19T14:31:59.313 に答える