从Jupyter运行时,外部函数返回DataFrames,但不返回变量

时间:2018-08-31 07:17:04

标签: python pandas jupyter-notebook

假设您在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程序包,但还是没有运气。

1 个答案:

答案 0 :(得分:2)

由于函数返回了tuple,因此可以使用sequence unpacking

mydf, Feb = testmath(mydf)

右侧返回一个结果元组,将结果解压缩为变量mydfFeb。然后可以像访问其他变量一样访问这些变量。

pd.DataFrame.pipe等效:

mydf, Feb = mydf.pipe(testmath)