0

我将-delimited.dat 文件DataFrame的目录导入熊猫。|以下代码有效,但我最终用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 回答