Запуск Jupyter-ноутбука из другого ноутбука
Задача: Возможно ли выполнить файл *.ipynb из другого файла *.ipynb и получить возвращаемое значение?
У меня возник вопрос о том, можно ли запустить файл Jupyter Notebook с расширением *.ipynb из другого файла *.ipynb и получить возвращаемое значение. Я знаю, что можно выполнить команду следующим образом:
%run ./called_notebook.ipynb
В файле called_notebook.ipynb
содержится следующий код:
def foo():
print(1)
return 2
foo()
Однако при выполнении этой команды выводится только "1", и у меня нет возможности обработать возвращаемое значение. Возможно ли это? Существует ли что-то наподобие следующего кода:
a = %run ./called_notebook.ipynb
Если да, то как это реализовать?
Спасибо!
3 ответ(ов)
Я бы рекомендовал запустить функцию foo
из нового ноутбука. Итак, вы можете сделать это следующим образом:
%run ./called_notebook.ipynb
foo()
На мой взгляд, это лучшая практика при использовании магической команды %run
. Храните ваши высокоуровневые API в отдельном ноутбуке (например, foo
), но оставляйте вызовы функций на видимых местах в главном ноутбуке.
Matt's ответ работает. Однако я хотел запустить called_notebook.ipynb
из calling_notebook.ipynb
и передать датафрейм из called_notebook
в calling_notebook
БЕЗ отображения какого-либо вывода.
Я пробовал множество вариантов, но ни один не сработал (теги и т.д.). Тем не менее, следующий код сработал (успешно отключив весь вывод в called_notebook.ipynb
):
# для подавления вывода ячейки
%%capture
%run -n ./called_notebook.ipynb
df = DFF() # функция в called_notebook, которая возвращает датафрейм после выполнения всех операций
df.info()
Таким образом, при запуске called_notebook
вывод не отображается, и вы можете передать датафрейм без каких-либо проблем.
Вы пробовали использовать специальный тег "%store <переменная>" и "%store -r"? Это способ сохранять данные в пространстве хранения iPython, и вы можете делиться переменными во время выполнения, если блокноты выполняются в одном экземпляре iPython.
Как сделать графики Matplotlib отображаемыми внутри IPython-ноутбука?
Как увеличить ширину ячейки в Jupyter/IPython Notebook в браузере?
Как клонировать список, чтобы он не изменялся неожиданно после присваивания?
Преобразование списка словарей в DataFrame pandas
Ошибка: "'dict' объект не имеет метода 'iteritems'"