【问题标题】:jupyter notebook/lab fails on imported functionjupyter notebook/lab 导入函数失败
【发布时间】:2019-01-21 12:56:50
【问题描述】:

我有一个适用于 pandas 数据框的布尔子集函数:

def operational(df):
    return df[(df['cf'] != 0) & (df['ta'] > 0)]

当在单元格中输入时,它在脚本和 jupiter 笔记本中运行良好:

#df = ...
df2 = operational(df)

但是,如果我将函数定义保留在 pick.py 中并导入到 jupyter,事情就会出乎意料。似乎在导入模块 jupiter 时不会协调函数内的变量类型:

import pick

pick.operational(df).head()

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-16-374442fd7c0a> in <module>()
      1 import pick
----> 2 pick.operational(df).head()

C:\Users\Евгений\Documents\GitHub\sandbox\pick.py in operational(_df)
     11 
     12 def operational(df):
---> 13     return df[(df['cf'] != 0) & (df['ta'] > 0)]

     14 
     15 

TypeError: 'method' object is not subscriptable

将某些内容导入笔记本通常是个坏主意吗?如果这很重要,我会使用 jupiter 实验室。

【问题讨论】:

  • 您要导入的脚本中是否还有另一个名为 df 的方法?
  • 你确定你传递的是同一个df
  • @Rahul Chawla - 实际上,当我注释掉所有内容时,pick.operational 起作用了,但 operational 定义!非常感谢!将调查dfpick.py 的命名空间中的位置。
  • 看起来我也需要重新启动内核才能再次执行导入。简单地使用 import 运行单元似乎不会导入最新版本的 pick 模块。
  • 看起来有一个 stackoverflow.com/questions/4111640/… 的案例

标签: python pandas jupyter


【解决方案1】:

好的,从 cmets 看来,您希望笔记本能够自动获取导入脚本中的更改。默认情况下,Python 会缓存imports,因此大多数情况下,对导入模块的更改在您重新启动 Python 之前不会被获取。

幸运的是,Jupyter 笔记本在 IPython 上运行,它提供了 code reloading cell magic。您需要做的就是运行:

%autoreload 2

在任何单元格中,从那时起,您的笔记本应该会在您进行更改时自动获取 pick.py 中的任何更改(当然,在重新加载魔法可以看到它们之前,您仍然必须将更改保存到磁盘) .

【讨论】:

    猜你喜欢
    • 2023-03-16
    • 1970-01-01
    • 2016-05-17
    • 1970-01-01
    • 2019-03-15
    • 1970-01-01
    • 2019-08-07
    • 2018-11-07
    • 1970-01-01
    相关资源
    最近更新 更多