在Jupyter中调用定义的函数时出现名称错误

时间:2017-12-22 10:01:41

标签: python-3.x function jupyter-notebook nameerror

我正在https://blog.patricktriest.com/analyzing-cryptocurrencies-python/关注教程并且我有点卡住了。我正在定义,然后立即调用一个函数。

我的代码如下:

def merge_dfs_on_column(dataframes, labels, col):
    '''merge a single column of each dataframe on to a new combined dataframe'''
    series_dict={}
    for index in range(len(dataframes)):
        series_dict[labels[index]]=dataframes[index][col]
    return pd.DataFrame(series_dict)
# Merge the BTC price dataseries into a single dataframe
btc_usd_datasets= merge_dfs_on_column(list(exchange_data.values()),list(exchange_data.keys()),'Weighted Price')

我可以清楚地看到我已经定义了merge_dfs_on_column功能,我认为语法是正确的,但是,当我在最后一行调用该函数时,我收到以下错误:

NameError                                 Traceback (most recent call last)
<ipython-input-22-a113142205e3> in <module>()
      1 # Merge the BTC price dataseries into a single dataframe
----> 2 btc_usd_datasets= merge_dfs_on_column(list(exchange_data.values()),list(exchange_data.keys()),'Weighted Price')

NameError: name 'merge_dfs_on_column' is not defined

我已经Google搜索了答案,并仔细检查了语法,但我无法理解为什么在调用时无法识别该功能。

4 个答案:

答案 0 :(得分:3)

在调用函数之前,您的函数定义不会被Python解释器执行。

仔细检查执行的内容以及何时执行。在Jupyter中,可以从输入顺序运行代码,这似乎是你不小心做的事情。 (或者尝试全部运行&#39;)

答案 1 :(得分:0)

好吧,如果你自己定义,

然后你可能直接从网上的某个地方复制并粘贴它,它可能包含你可能看不到的字符。

只需输入并定义该功能并使用pass并注释掉其他代码,看看它是否正常工作。

答案 2 :(得分:0)

“全部运行”无效。
关闭内核并重新启动也无济于事。

如果我写:

def whatever(a):
    return a*2

whatever("hallo")

在下一个单元格中有效。

答案 3 :(得分:0)

我在jupyter notebook中也经常遇到这种问题
但是在用 import static java.lang.Math.*; 替换 %% 后,错误解决了。我不知道为什么?
因此,经过一些浏览后,我发现这不是 jupyter Notenook 问题,而是 ipython 问题
here is the issue 并且此问题也在 this stackoverflow question

中得到了解答