Pandas read_stata()包含大型.dta文件

Jon*_*han 10 python stata pandas

我正在使用大约3.3千兆字节的Stata .dta文件,因此它很大但不会过大.我有兴趣使用IPython并尝试使用Pandas导入.dta文件,但是有些事情正在发生.我的盒子有32千兆字节的RAM,并试图加载.dta文件导致所有使用的RAM(约30分钟后)和我的计算机停止运行.这不是'感觉'正确,因为我能够使用外部包中的read.dta()打开R中的文件没有问题,并且使用Stata中的文件很好.我使用的代码是:

%time myfile = pd.read_stata(data_dir + 'my_dta_file.dta')
Run Code Online (Sandbox Code Playgroud)

我在Enthought的Canopy程序中使用IPython.'%time'的原因是因为我有兴趣对R的read.dta()进行基准测试.

我的问题是:

  1. 有什么我做错了导致熊猫出现问题吗?
  2. 是否有解决方法将数据导入Pandas数据帧?

Abr*_*man 7

这是一个对我来说很方便的小功能,使用了一些pandas在最初提出问题时可能无法使用的功能:

def load_large_dta(fname):
    import sys

    reader = pd.read_stata(fname, iterator=True)
    df = pd.DataFrame()

    try:
        chunk = reader.get_chunk(100*1000)
        while len(chunk) > 0:
            df = df.append(chunk, ignore_index=True)
            chunk = reader.get_chunk(100*1000)
            print '.',
            sys.stdout.flush()
    except (StopIteration, KeyboardInterrupt):
        pass

    print '\nloaded {} rows'.format(len(df))

    return df
Run Code Online (Sandbox Code Playgroud)

我在100分钟内加载了一个11G Stata文件,如果我厌倦了等待和击中,那么有一些东西可以玩cntl-c.

这款笔记本显示它在行动.


Rob*_*rer 0

问题1.

对此我无话可说。

问题2。

考虑使用 Stata 命令导出.dta 文件,然后在 pandas 中使用。事实上,您可以获取新创建的文件,将其用作 R 的输入并与 pandas 进行比较(如果感兴趣的话)。可能进行了比 . 更多的测试。.csvoutsheetexport delimitedread_csv().csvread_csvread_stata

运行help outsheet以获取导出的详细信息。