具有更多内存的服务器上的Pandas MemoryError

时间:2015-05-01 14:31:41

标签: python memory pandas deep-copy windows-server-2012-r2

我有一个处理pandas上的数据帧的方法,它在两个不同的系统上表现不同。在尝试加载和使用特定的源csv时,我在Windows服务器上使用16gb ram但在本地计算机上只有12

时出现内存错误
def load_table(self, name, source_folder="", columns=None):
    """Load a table from memory or csv by name.

    loads a table from memory or csv. if loaded from csv saves the result
    table to the temporary list. An explicit call to save_table is
    necessary if the results want to survive clearing temporary storage
    @param string name the name of the table to load
    @param string sourceFolder the folder to look for the csv if the table
        is not already in memory
    @return DataFrame returns a DataFrame representing the table if found.
    @raises IOError if table cannot be loaded
    """
    #using copy in these first two to avoid modification of existing data
    #without an explicit save_table
    if name in self.tables:
        result = self.tables[name].copy()
    elif name in self.temp_tables:
        result = self.temp_tables[name].copy()
    elif os.path.isfile(name+".csv"):
        data_frame = pd.read_csv(name+".csv", encoding="utf-8")
        self.save_temp(data_frame, name)
        result = data_frame
    elif os.path.isfile(name+".xlsx"):
        data_frame = pd.read_excel(name+".xlsx", encoding="utf-8")
        self.save_temp(data_frame, name)
        result = data_frame
    elif os.path.isfile(source_folder+name+".csv"):
        data_frame = pd.read_csv(source_folder+name+".csv", encoding="utf-8")
        self.save_temp(data_frame, name)
        result = data_frame
    elif os.path.isfile(source_folder+name+".xlsx"):
        data_frame = pd.read_excel(source_folder+name+".xlsx", encoding="utf-8")
        self.save_temp(data_frame, name)
        result = data_frame

和save_temp是这样的:

def save_temp(self, data_frame, name):
        """ save a table to the temporary storage

        @param DataFrame data_frame, the data frame we are storing
        @param string name, the key to index this value
        @throws ValueError throws an error if the data frame is empty
        """
        if data_frame.empty:
            raise ValueError("The data frame passed was empty", name, data_frame)
        self.temp_tables[name] = data_frame.copy()

有时memoryError发生在我在交互式解释器中尝试手动加载该文件的read_csv,然后将其保存到此处引用的表字典中。然后尝试在副本上执行load_table错误。

使用手动加载的数据框并在其上调用.copy()也会产生一个MemoryError,服务器上没有文本,但不是本地文本。

服务器计算机正在运行Windows Server 2012 R2,而我的本地计算机是Windows 7

两者都是64位计算机

服务器是2.20GHz,带有2个处理器,而我的本地机器是3.4 GHz 服务器:16GB RAM 本地:12GB RAM

将.copy()更改为.copy(False)允许代码在服务器计算机上运行,​​但不回答为什么它会在具有更多内存的计算机上获取MemoryError的问题。< / p>

编辑添加: 两者都在使用 大熊猫:0.16.0 numpy:1.9.2 服务器显然使用32位python,而我的本地机器是64位

为2.7.8

1 个答案:

答案 0 :(得分:3)

所以你的问题是,尽管有相同版本的pandas和64位操作系统你有32位python,内存限制为2gb。