我有一个使用Python 3.5的Jupyter笔记本。我用Python编写的代码用来分析模拟中的数据。
在第一个单元格中,我使用
%run control.py
我得到了错误
> ImportError Traceback (most recent call
> last) ...\code\control.py in
> <module>()
> 15 from supplier import Supplier
> 16 from heatmap import create_heatmaps
> ---> 17 from write2csv import get_dataframe_from_results, write_raw_data_from_simulation, get_aggregated_lines_per_run
> 18 #write_aggregated_results,
> 19
>
> ImportError: cannot import name 'get_dataframe_from_results'
我的程序被分成几个文件。当我从导入中删除方法“ get_dataframe_from_results”时,它可以工作。此方法与文件/模块write2csv中的其他方法一起使用。
我不明白,为什么只有这种方法无法导入。可以导入此文件中的所有其他功能,因此我排除了源文件夹位置的问题。
该函数本身不包含任何异常:
def get_dataframe_from_results(all_aggr_results):
# convert results to pandas data frame from nested dictionary
results_df = pd.Panel(all_aggr_results)
STRATS = ("AN", "RE")
RLZ = ("NOR", "DIS")
vlzlist = []
for vlz in sorted(all_aggr_results):
outerlist = []
for rl in RLZ:
concatlist = []
for strt in STRATS:
concatlist.append(pd.DataFrame.from_dict(results_df[vlz][strt][rl], orient="index"))
outerlist.append(pd.concat(concatlist, keys=STRATS))
vlzlist.append(pd.concat(outerlist, keys=RLZ))
results = pd.concat(vlzlist, keys=sorted(all_aggr_results))
results.index.names = ["A", "B", "C", "C"]
results["totalcost"] = results["AAA"] + results["BBB"] + results["CCC"] + results["DDD"]
results.reset_index(inplace=True) # transform multiindex to columns
return results
与其他功能相比,它为什么可以与众不同的唯一“原因”是它使用了熊猫。
当我在PyCharm中运行脚本control.py时,它可以正常工作。当我从命令行运行它时,我得到
查找'control.py'的规范时出错(:模块'control'没有属性' path ')
当我从代码中忽略函数get_dataframe_from_results时,它可以在Jupyter中使用。
如何在Jupyter中解决该错误并发挥作用?
笔记本服务器的版本为4.1.0,并在以下平台上运行:
Python 2.7.11 | Anaconda 4.0.0(64位)| (默认值,2016年2月16日,09:58:36)[MSC v.1500 64位(AMD64)]
当前内核信息:
Python 3.5.1 | Anaconda 4.1.0(64位)| (默认值,2016年6月15日,15:29:36)[MSC v.1900 64位(AMD64)]
当您在开发(编辑)外部代码时,同时在开发Jupyter笔记本,则会出现此问题。Jupyter缓存可防止它在首次导入后重新加载外部文件。
解决方案是删除外部python缓存目录__pycache__
,然后通过菜单项“内核->重新启动并清除输出”重新启动Jupyter笔记本。同时执行这两项操作将迫使Jupyter读取外部文件的新副本/新副本,从而识别出新符号和其他修改。
(我知道您的问题已有一年多的历史了。但是在今天整个上午都在努力解决这个问题之后,我想为遇到此问题的其他任何人提供一份有据可查的答案。)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句