jupyter notebook 某个cell 一直在运行

本文探讨了一段Python代码为何运行缓慢,发现主要问题是切片赋值引发的警告和标准输出缓冲满。通过调整代码并理解设置复制警告,揭示了切片不可直接赋值和过度使用标准输出的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

近期调试程序,发现一简单的代码一直在运行,很长时间不终止,代码如下:

whole_df=pd.read_csv(r'./train.csv')

community=whole_df['COMMUNITY_ID'].unique()

for community_id in community:

    temp=check_result[check_result['COMMUNITY_ID']==community_id]

    start=temp.index.tolist()[0]

    delanomaly_test(temp,start)

其中delanomaly_test 是对测试数据进行处理异常值的函数,函数里有对形参temp进行赋值的操作,而temp 是whole_df的切片,执行后,出现了很多提示:

/usr/local/python3/lib/python3.6/site-packages/pandas/core/indexing.py:1763: SettingWithCopyWarning:


A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy

一大串的全是提示,而且还一直扩展向下,过了10分钟,不再出现提示,但是这段cell 执行符号里显示‘*’,为一直在执行,本身数据量不大,community 为200个,check_result为8万条,应该2、3分钟就结束了但是又过5分钟还是‘*’号,点‘Interrupt the kernel ’也是很长时间没反应。用写标准输出+写文件的方式测试下:

whole_df=pd.read_csv(r'./train.csv')

community=whole_df['COMMUNITY_ID'].unique()
filename='proeceeing.txt'

with open(file_name,'w+') as f:

    f.write(file_name)

w=0 #进度的变量

for community_id in community:

    if w%50==0:

        print('w=%s' %str(w)) #打印至标准输出

        f=open(file_name,'a')

        f.write('\n     '+str(w)+':')#写入文件

        f.write(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())))  

        f.close()

    temp=check_result[check_result['COMMUNITY_ID']==community_id]

    start=temp.index.tolist()[0]

    delanomaly_test(temp,start)

    w=w+1
print('w=%s' %str(w)) #打印至标准输出

f=open(file_name,'a')

print('w=%s' %str(w))

f.write('\n     '+str(w)+':') #写入文件

f.write(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())))

f.write('\n check_result executed ')

f.close()

执行后,文件内容如下:

processing.txt
     0:2021-08-25 21:14:38
     50:2021-08-25 21:14:43
     100:2021-08-25 21:14:49
     150:2021-08-25 21:14:54
     200:2021-08-25 21:15:00
 check_result executed 

看来这段代码在一分钟之内已经执行完毕,再看标准输出,还是有很多之前的提示,同时标示进度的w值里,只发现了三条:

w=0

w=50

w=100

再向后就只有提示,再向后提示也终止了

因此这段代码一直执行的可能原因是短时间内写大量内容至标准输出,标准输出缓冲区满,无法打印提示和之后的内容,但程序实际已执行完毕。最后删除delanomaly_test 函数里的切片赋值语句,发现这段代码很快结束,至此问题有三个:切片不可直接赋值,标准输出不可靠,每个提示都要细看

### Jupyter Notebook 单元格的使用与配置 #### 单元格类型及其功能 Jupyter Notebook 支持多种类型的单元格,主要包括代码单元格、Markdown 单元格以及原始文本单元格。 - **代码单元格**用于编写和执行 Python 或其他支持的语言代码。可以运行任意复杂的计算逻辑并立即查看结果。 - **Markdown 单元格**允许用户输入格式化的文本描述,包括标题、列表、链接等,非常适合用来记录文档说明或展示分析过程中的思考[^1]。 - **原始文本单元格**则提供了一种方式来包含不被渲染成 HTML 的纯文本内容,在某些情况下可用于保存临时笔记或其他形式的数据。 #### 基础操作命令 对于每一个新创建出来的默认都是代码型态下的空白区域;如果想要转换为 markdown,则可以在选中该 Cell 后按 `M` 键切换模式;反之亦然,通过按下 `Y` 可返回到 Code Mode 下面去编辑 python script 之类的东西[^4]。 另外还有几个常用的快捷键可以帮助更高效地管理这些 Cells: - 使用 `Shift + Enter` 来执行当前选定的 Cell 并自动跳转至下一个; - 利用 `Ctrl + S` 实现即时存盘动作而无需手动点击菜单栏上的 Save 按钮; - 若要删除某个特定位置处存在的 block ,只需将其高亮显示出来之后再敲击一次 Delete 就好了。 #### 高级特性设置 为了进一步增强用户体验,还可以安装第三方扩展插件来自定义界面布局或是增加额外的功能选项。比如启用 ITKWidgets 扩展就可以让交互式的三维图像处理变得更加直观简单[^3]。 ```bash jupyter nbextension enable --py --sys-prefix itkwidgets ``` 此外,当面对团队协作场景时,考虑到多人可能需要共享同一个工作环境的情况,Jupyter 提供了一个内置服务器机制使得远程访问变得轻而易举。启动服务端口后即可邀请他人连接至此实例参与共同开发项目了[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值