首页 > 解决方案 > 从 Jupyter 运行时,外部函数返回 DataFrames 但不返回变量

问题描述

假设您在 Jupyter 笔记本中有一个名为 MainNotebook.ipynb 的数据框,并且您正在将此数据框传递给一个名为testmath的 Python 文件中的外部 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

我试图让函数同时返回 DataFramemydf和变量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: name 'Feb' is not defined

有没有办法检索函数内部生成的变量?特别是如果你有很多?(我更喜欢不涉及全局变量的方法,gulp)

我已经尝试过删除 pycache,重新启动内核并清除输出。我还更新了所有的 conda 包,但仍然没有运气。

标签: pythonpandasjupyter-notebook

解决方案


由于您的函数返回 a tuple,您可以使用序列解包

mydf, Feb = testmath(mydf)

右侧返回一个结果元组,这些结果被解包到变量mydfFeb. 然后可以像访问任何其他变量一样访问这些变量。

等效地,与pd.DataFrame.pipe

mydf, Feb = mydf.pipe(testmath)

推荐阅读