0

-delimited.datファイルDataFrameのディレクトリをパンダにインポートします。|次のコードは機能しますが、最終的にはRAMが不足しますMemoryError:

import pandas as pd
import glob

temp = []
dataDir = 'C:/users/richard/research/data/edgar/masterfiles'
for dataFile in glob.glob(dataDir + '/master_*.dat'):
    print dataFile
    temp.append(pd.read_table(dataFile, delimiter='|', header=0))

masterAll = pd.concat(temp)

よりメモリ効率の高いアプローチはありますか?それとも、データベースに完全に取り掛かる必要がありますか?(私は最終的にデータベースに移動しますが、私はパンダへの移動を踏みにじっています。)ありがとう!

FWIW、これが.datファイルの例の先頭です。

cik|cname|ftype|date|fileloc
1000032|BINCH JAMES G|4|2011-03-08|edgar/data/1000032/0001181431-11-016512.txt
1000045|NICHOLAS FINANCIAL INC|10-Q|2011-02-11|edgar/data/1000045/0001193125-11-031933.txt
1000045|NICHOLAS FINANCIAL INC|8-K|2011-01-11|edgar/data/1000045/0001193125-11-005531.txt
1000045|NICHOLAS FINANCIAL INC|8-K|2011-01-27|edgar/data/1000045/0001193125-11-015631.txt
1000045|NICHOLAS FINANCIAL INC|SC 13G/A|2011-02-14|edgar/data/1000045/0000929638-11-00151.txt
4

1 に答える 1

3

通常、メモリ使用量を気にする場合は、事前にリストを作成するのではなく、ジェネレータを使用することをお勧めします。何かのようなもの:

dir_path = os.path.join(data_dir, 'master_*.dat')
master_all = pd.concat(pd.read_table(data_file, delimiter='|', header=0)
                                     for data_file in glob.glob(dir_path))

または、より詳細なバージョンのジェネレーター関数を作成することもできます。

とにかく、RAMが最終結果と完全なファイルをリストするための一時スペースを含むのに十分でない場合、これは問題を解決しません(そしておそらくもっと...それはガベージコレクターがどのように機能するかに依存します)。

于 2012-09-12T17:05:39.567 に答える