假设您在Jupyter笔记本中有一个名为MainNotebook.ipynb的数据框,并将此数据框传递给名为testmath
的python文件中名为testmath.py
的外部python函数:
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程序包,但还是没有运气。
答案 0 :(得分:2)
由于函数返回了tuple
,因此可以使用sequence unpacking:
mydf, Feb = testmath(mydf)
右侧返回一个结果元组,将结果解压缩为变量mydf
和Feb
。然后可以像访问其他变量一样访问这些变量。
mydf, Feb = mydf.pipe(testmath)