Pandas 具有更多内存的服务器出现 MemoryError
Pandas MemoryError on server with more Memory
我有一种在 pandas 上处理数据帧的方法,该方法在 2 个不同的系统上表现不同。在尝试加载和使用特定源 csv 时,我在具有 16gb ram 的 Windows 服务器计算机上出现内存错误,但在只有 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()
有时内存错误发生在 read_csv 我尝试在交互式解释器中手动加载此文件,该文件有效,然后将其保存到此处引用的表字典中。然后尝试在副本上执行 load_table 错误。
获取手动加载的数据帧并在其上调用 .copy() 也会产生 MemoryError,服务器框上没有文本,但本地没有。
服务器机器是 运行ning Windows Server 2012 R2 而我的本地机器是 Windows 7
都是64位机器
服务器是 2.20GHz,有 2 个处理器,而我的本地机器是 3.4GHz
Server:16GB 内存
本地:12GB RAM
将 .copy() 更改为 .copy(False) 允许代码在服务器机器上 运行 但没有回答为什么它会在具有更多内存的机器上出现 MemoryError 的问题首先。
编辑添加:
两者都在使用
pandas:0.16.0
麻木的:1.9.2
服务器显然使用 32 位 python 而我的本地机器是 64 位
两者都是 2.7.8
所以你的问题是,尽管 pandas 的版本相同并且是 64 位操作系统,但你有 32 位 python,内存限制为 2gb。
我有一种在 pandas 上处理数据帧的方法,该方法在 2 个不同的系统上表现不同。在尝试加载和使用特定源 csv 时,我在具有 16gb ram 的 Windows 服务器计算机上出现内存错误,但在只有 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()
有时内存错误发生在 read_csv 我尝试在交互式解释器中手动加载此文件,该文件有效,然后将其保存到此处引用的表字典中。然后尝试在副本上执行 load_table 错误。
获取手动加载的数据帧并在其上调用 .copy() 也会产生 MemoryError,服务器框上没有文本,但本地没有。
服务器机器是 运行ning Windows Server 2012 R2 而我的本地机器是 Windows 7
都是64位机器
服务器是 2.20GHz,有 2 个处理器,而我的本地机器是 3.4GHz Server:16GB 内存 本地:12GB RAM
将 .copy() 更改为 .copy(False) 允许代码在服务器机器上 运行 但没有回答为什么它会在具有更多内存的机器上出现 MemoryError 的问题首先。
编辑添加: 两者都在使用 pandas:0.16.0 麻木的:1.9.2 服务器显然使用 32 位 python 而我的本地机器是 64 位 两者都是 2.7.8
所以你的问题是,尽管 pandas 的版本相同并且是 64 位操作系统,但你有 32 位 python,内存限制为 2gb。