2016-06-14 3 views
2

В настоящее время я работаю с pandas и ipython. Поскольку кадры данных pandas копируются при выполнении операций с ним, использование моей памяти увеличивается на 500 мб с каждой ячейкой. Я считаю, что это связано с тем, что данные сохраняются в переменной Out, так как это не происходит с интерпретатором python по умолчанию.Предотвращение сохранения ipython в переменной Out

Как отключить переменную Out?

+0

Можете ли вы привести пример кода? Я думал, что операции могут быть либо 'inplace = True', либо нет ... – IanS

+0

@IanS Я использую такие операторы, как' +,/'и т. Д. Даже если это не так, я бы предпочел не использовать' infile' для всего , – parchment

ответ

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, используя команду ipython profile create <name>. Это создаст новый профиль под ~/.ipython/profile_<name> с конфигурационным файлом по умолчанию. Затем вы можете запустить ipython с помощью опции --profile <name> для загрузки этого профиля.

В качестве альтернативы вы можете использовать %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 
+0

Вы говорите, что у вас проблемы с настройкой cache_size - где вы его пытаетесь установить? Это параметр конфигурации IPython, а не параметр конфигурации Jupyter, поэтому он по-прежнему находится под '~/.ipython/profile_default /'. –

+0

@ThomasK Я попытался использовать магию '% config' и передал в командной строке опцию' --InteractiveShell.cache_size = 0'. Я знаю, что вы можете создавать профили, но я считаю, что для этого нужно хотя бы сделать это, не создавая его или не меняя профиль по умолчанию. В любом случае, если это единственный способ, я отредактирую его в ответе. – Bakuriu

+0

Вы можете временно установить его с помощью магии '% config' или командной строки. Постоянно устанавливать его необходимо в профиле. –

Смежные вопросы