16

この質問には、concat の実装に関する洞察が必要だと思います。

たとえば、30 個のファイルがあり、それぞれが 1G で、最大 32 G のメモリしか使用できないとします。「list_of_pieces」と呼ばれるデータフレームのリストにファイルをロードしました。この list_of_pieces のサイズは ~ 30G ですよね?

「pd.concat(list_of_pieces)」を実行すると、concat はヒープに別の 30G (または 10G 15G) を割り当てていくつかの操作を実行しますか、それとも新しいメモリを割り当てずに「その場で」連結を実行しますか?

誰もこれを知っていますか?

ありがとう!

4

1 に答える 1

15

答えはノーです。これはインプレース操作ではありません。np.concatenate はボンネットの下で使用されます。ここを参照してください: Concatenate Numpy arrays without copys

問題へのより良いアプローチは、これらの各部分をHDFStoreテーブルに書き込むことです。ドキュメント についてはhttp://pandas.pydata.org/pandas-docs/dev/io.html#hdf5-pytablesを参照してください。一部のレシピについては、 ://pandas.pydata.org/pandas-docs/dev/cookbook.html#hdfstoreを参照してください。

次に、必要に応じて(クエリまたは行番号によって)任意の部分(またはセット全体)を選択できます

データがディスク上にある場合でも、特定のタイプの操作を実行できます: https://github.com/pydata/pandas/issues/3202?source=cc、およびここ: http://pytables.github.io/usersguide /libref/expr_class.html#

于 2013-06-07T14:37:11.713 に答える