sql >> データベース >  >> NoSQL >> MongoDB

MongoDBから巨大なパンダデータフレームをロードするために使用されるメモリを削減します

    CSVに含まれるものとデータフレームに含まれるものは、2つのまったく異なるものです。例:9.9 および9.99999999999999 CSVの場合、データフレーム内の同じ量のスペースが必要になります。

    とはいえ、データフレーム内のデータは、リスト内のデータよりもはるかに少ないスペースで済みます。リストの作成はメモリ内でコストがかかります。また、データフレームに追加するには、パンダが新しい(より大きな)データフレームを作成し、すべてをコピーしてから、元のデータフレームをガベージコレクションする必要があります。

    60000行のデータフレーム(または合計でいくつもの行がある場合でも)を事前に割り当てた方が、おそらくはるかにうまくいくでしょう。例:

    data = pd.DataFrame(np.empty((60000,), dtype=[
        ('x', np.uint8),
        ('y', np.float64)
    ]))
    

    次に、datasetに依存せずに、各行にその行のデータを挿入します リスト:

    data.values[count,:] = rowdata_at_count
    

    これはタイプセーフではありませんが、(割り当てが行われていないため)かなり高速なので、rowdata_at_countを確認してください。 要素が列タイプに対応するリストです。

    編集

    はい、100行を追加することは、1行の100個の連結のようなものだと思います(各追加は、連結と同じように、テーブルを再割り当てしてコピーする必要があるため)。事前割り当てにより、追加と連結の両方が回避されます。テーブルサイズは変更されず、再割り当てやコピーを行う必要はありません。



    1. すべてのサブドキュメントのObjectIdを作成していないMongoose自己参照スキーマ

    2. $exprarrayElementAtが埋め込みドキュメントの集計で機能しない

    3. ネストされた関係MongoDb

    4. mongoDB:15分間隔で時間を表示する$dateToString形式