Внешняя функция возвращает DataFrames, но не переменные при запуске из Jupyter - PullRequest
0 голосов
/ 31 августа 2018

Допустим, у вас есть блок данных в записной книжке Jupyter с именем MainNotebook.ipynb, и вы передаете этот блок данных во внешнюю функцию Python testmath в файле Python testmath.py:

import pandas as pd
from testmath import testmath

sales = [{'account': 'Jones LLC', 'Jan': 150, 'Feb': 200, 'Mar': 140},
         {'account': 'Alpha Co',  'Jan': 200, 'Feb': 210, 'Mar': 215},
         {'account': 'Blue Inc',  'Jan': 50,  'Feb': 90,  'Mar': 95 }]

mydf = pd.DataFrame(sales)

testmath(mydf)

Вот код для testmath.py:

import pandas as pd

def testmath(inputdf):
    Feb = inputdf['Feb']
    inputdf['FebPesos'] = Feb * 12
    return inputdf, Feb

Я пытаюсь заставить функцию возвращать ОБА DataFrame mydf И переменную Feb, чтобы я мог использовать их для последующего анализа.

Однако странно то, что при запуске testmath(mydf) из MainNotebook.ipynb, когда DataFrame возвращается с добавленным новым столбцом, переменная 'Feb' недоступна.

Под этим я подразумеваю, что если вы запускаете следующее из MainNotebook:

from importdebug import testmath
import pandas as pd

sales = [{'account': 'Jones LLC', 'Jan': 150, 'Feb': 200, 'Mar': 140},
         {'account': 'Alpha Co',  'Jan': 200, 'Feb': 210, 'Mar': 215},
         {'account': 'Blue Inc',  'Jan': 50,  'Feb': 90,  'Mar': 95 }]

mydf = pd.DataFrame(sales)

testmath(mydf)

print(Feb)

Команда на print(Feb) возвращает ошибку: NameError: имя 'Feb' не определено

Есть ли способ получить переменные, сгенерированные внутри функции? Особенно, если их у вас много? (Я бы предпочел метод, который не включает глобальные переменные, gulp)

Я уже пытался удалить pycache, перезапустить ядро ​​и очистить вывод. Я также обновил все пакеты conda, но все равно не повезло.

1 Ответ

0 голосов
/ 02 сентября 2018

Поскольку ваша функция возвращает tuple, вы можете использовать последовательность распаковки :

mydf, Feb = testmath(mydf)

Правая часть возвращает набор результатов, которые распакованы в переменные mydf и Feb. Эти переменные могут быть доступны, как и любая другая переменная.

Эквивалентно, с pd.DataFrame.pipe:

mydf, Feb = mydf.pipe(testmath)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...