你将如何找出一个对象使用了多少内存?我知道有可能找出代码块使用了多少,但不是实例化对象(在其生命中的任何时间),这就是我想要的.
我正在探索作为长期SAS用户切换到python和pandas.
但是,今天运行一些测试时,我很惊讶python在尝试pandas.read_csv()128mb csv文件时内存不足.它有大约200,000行和200列主要是数字数据.
使用SAS,我可以将csv文件导入SAS数据集,它可以和我的硬盘一样大.
有类似的东西pandas吗?
我经常处理大型文件,无法访问分布式计算网络.
我正在使用iPython来运行我的代码.我想知道是否有任何模块或命令可以让我检查一个对象的内存使用情况.例如:
In [1]: a = range(10000)
In [2]: %memusage a
Out[2]: 1MB
Run Code Online (Sandbox Code Playgroud)
类似于%memusage <object>并返回对象使用的内存.
重复
大多数IPython的"神奇功能"的工作对我罚款马上蝙蝠: %hist,%time,%prun等.然而,我注意到,%lprun无法IPython中找到,因为我想最初安装它.
然后我发现我应该安装line_profiler模块.我已经安装了这个模块,但似乎仍然无法使魔术功能正常工作.如果我试图打电话%lprun,iPython仍然无法找到该功能.如果我用全名(line_profiler.magic_lprun)调用它,可以找到该函数,但我根本无法使用它.下面是我所做的一个例子(从"Python for Data Analysis"一书中逐步采用):
%prun[在:]
def add_and_sum(x, y):
added = x + y
summed = added.sum(axis=1)
return summed
x = randn(3000, 3000)
y = randn(3000, 3000)
add_and_sum(x, y)
Run Code Online (Sandbox Code Playgroud)
有了这个,我得到了一个很好的答案,正如所料:
[输出:]
array([-23.6223074 , -10.08590736, -31.2957222 , ..., -14.17271747,
63.84057725, -50.28469621])
Run Code Online (Sandbox Code Playgroud)
我可以做剖析魔术功能%prun:
[在:]
%prun add_and_sum(x, y)
Run Code Online (Sandbox Code Playgroud)
[输出:]
6 function calls in 0.042 seconds
Ordered by: internal time
ncalls tottime percall cumtime …Run Code Online (Sandbox Code Playgroud) 我有一个包含约 50,000 行和 300 列的 csv 文件。执行以下操作会导致 Pandas (python) 中出现内存错误:
merged_df.stack(0).reset_index(1)
Run Code Online (Sandbox Code Playgroud)
数据框如下所示:
GRID_WISE_MW1 Col0 Col1 Col2 .... Col300
7228260 1444 1819 2042
7228261 1444 1819 2042
Run Code Online (Sandbox Code Playgroud)
我正在使用最新的 pandas (0.13.1),并且行数较少 (~2,000) 的数据帧不会出现该错误
谢谢!