Python 熊猫用大的.dta文件读取_stata()

Python 熊猫用大的.dta文件读取_stata(),python,pandas,stata,Python,Pandas,Stata,我使用的是一个大约3.3g字节的Stata.dta文件,所以它很大,但不会太大。我对使用IPython感兴趣,并尝试使用Pandas导入.dta文件,但出现了一些问题。我的盒子有32 GB的RAM,试图加载.dta文件会导致所有的RAM都被使用(大约30分钟后),我的电脑会熄火。这“感觉”不对,因为我可以使用外部包中的read.dta()在R中打开文件,没有问题,在Stata中使用该文件也可以。我使用的代码是: %time myfile = pd.read_stata(data_dir + 'm

我使用的是一个大约3.3g字节的Stata.dta文件,所以它很大,但不会太大。我对使用IPython感兴趣,并尝试使用Pandas导入.dta文件,但出现了一些问题。我的盒子有32 GB的RAM,试图加载.dta文件会导致所有的RAM都被使用(大约30分钟后),我的电脑会熄火。这“感觉”不对,因为我可以使用外部包中的read.dta()在R中打开文件,没有问题,在Stata中使用该文件也可以。我使用的代码是:

%time myfile = pd.read_stata(data_dir + 'my_dta_file.dta')
我在Enthough的天篷计划中使用了IPython。之所以使用“%time”,是因为我有兴趣将其与R的read.dta()进行基准测试

我的问题是:

  • 我做错了什么导致熊猫有问题吗
  • 是否有将数据放入数据框的变通方法 问题1

    关于这件事我没什么可说的

    问题2

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


    运行
    help outsheet
    以了解导出的详细信息。

    对于所有在此页面结束的用户,请将Pandas升级到最新版本。我在加载过程中遇到了一个死机计算机的问题(300 MB的Stata文件,但只有8 GB的系统ram),从v0.14升级到v0.16.2很快就解决了这个问题


    目前,它是V0.16.2。虽然我不知道具体细节,但速度有了显著的提高。请参阅:

    这里有一个对我来说很方便的小功能,它使用了一些最初提出问题时可能不可用的功能:

    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
    
    我用它在100分钟内加载了一个11G Stata文件,如果我厌倦了等待并点击了
    cntl-c
    ,我就可以玩它了


    .

    您不应该将3GB以上的文件读入内存中的数据对象,这会导致灾难(与熊猫无关)。 正确的方法是mem映射文件并根据需要访问数据

    您应该考虑将您的文件转换为更合适的格式(<代码> CSV 或<代码> HDF),然后您可以使用围绕BANDAS DATAFRAM的包装器按需要加载块:

    from dask import dataframe as dd
    # If you don't want to use all the columns, make a selection
    columns = ['column1', 'column2']
    data = dd.read_csv('your_file.csv', use_columns=columns)
    

    这将透明地处理数据块加载、多核数据处理和所有这些问题。

    有一种更简单的方法可以使用Pandas的内置函数
    read\u stata
    解决这个问题

    import pandas as pd
    
    reader=pd.read_stata("large.dta",chunksize=100000)
    
    df = pd.DataFrame()
    
    for itm in reader:
        df=df.append(itm)
    
    df.to_csv("large.csv")
    
    假设您的大文件名为
    large.dta

    import pandas as pd
    
    reader=pd.read_stata("large.dta",chunksize=100000)
    
    df = pd.DataFrame()
    
    for itm in reader:
        df=df.append(itm)
    
    df.to_csv("large.csv")
    

    你用的是64位的机器吗。您的R可能是64位版本,Python是32位版本吗?在您的特定情况下,
    hdf
    将是比
    csv
    更好的格式