防止ipython将输出存储在Out变量中

时间:2016-06-14 10:02:29

标签: python pandas ipython

我目前正在使用pandas和ipython。由于在使用pandas数据帧执行操作时会复制它,因此每个单元的内存使用量会增加500 MB。我相信它是因为数据存储在Out变量中,因为默认的python解释器不会发生这种情况。

如何禁用Out变量?

1 个答案:

答案 0 :(得分:4)

您拥有的第一个选项是避免产生输出。如果你真的不需要中间结果,就可以避免它们并将所有计算放在一个单元格中。

如果您需要实际显示该数据,可以使用InteractiveShell.cache_size选项设置缓存的最大大小。将此值设置为0会禁用缓存。

为此,您必须在ipython_config.py目录下创建一个名为ipython_notebook_config.py(或~/.ipython/profile_default)的文件,其中包含以下内容:

c = get_config()

c.InteractiveShell.cache_size = 0

之后你会看到:

In [1]: 1
Out[1]: 1

In [2]: Out[1]
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-2-d74cffe9cfe3> in <module>()
----> 1 Out[1]

KeyError: 1

您还可以使用命令ipython profile create <name>为ipython创建不同的配置文件。这将在~/.ipython/profile_<name>下创建一个带有默认配置文件的新配置文件。然后,您可以使用--profile <name>选项启动ipython以加载该配置文件。

或者,您可以使用%reset out魔法重置输出缓存或使用%xdel魔法删除特定对象:

In [1]: 1
Out[1]: 1

In [2]: 2
Out[2]: 2

In [3]: %reset out

Once deleted, variables cannot be recovered. Proceed (y/[n])? y
Flushing output cache (2 entries)

In [4]: Out[1]
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-4-d74cffe9cfe3> in <module>()
----> 1 Out[1]

KeyError: 1

In [5]: 1
Out[5]: 1

In [6]: 2
Out[6]: 2

In [7]: v = Out[5]

In [8]: %xdel v    # requires a variable name, so you cannot write %xdel Out[5]

In [9]: Out[5]     # xdel removes the value of v from Out and other caches
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-9-573c4eba9654> in <module>()
----> 1 Out[5]

KeyError: 5