You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python pandas嵌套for循环无限运行但结果正常生成问题排查

问题原因

代码出现长时间无响应(看似无限运行)的核心原因是重复计算+低效遍历,没有利用pandas的向量化特性,计算量被无意义放大:

  • 提取唯一分类的代码中,你每次循环都调用dft['listed_in'].str.split(','),每调用一次就会对全量数据做一次字符串拆分,假设数据集有N行,你就重复做了N次完全相同的拆分操作;再加上用列表做in判断的时间复杂度随分类数量线性上涨,数据量稍大就会极慢。
  • 统计频次的代码除了重复触发全列split的问题,还存在逻辑错误:你取的是split结果的index和value_counts(),根本不是单条作品对应的分类标签,等于判断和计数逻辑从根上就错了。另外硬编码的65、514两个循环边界没有通用性,数据变动就会触发索引报错。
高效实现方案

不需要写双层for循环,pandas原生方法可以在毫秒级完成需求,全程只需要做一次字符串拆分:

  1. 一次性拆分所有分类,避免重复计算
# 仅做一次全列拆分,结果存为变量复用
split_tags = dft['listed_in'].str.split(',')
  1. 提取唯一分类列表
# 展平所有标签、去重,顺便清理标签前后的空格/多余引号
genres = list({tag.strip().strip("'") for tags in split_tags for tag in tags})
  1. 统计每个分类的出现次数
    直接用explode把每行的多标签拆成独立行,再做值计数即可,不需要手动遍历累加:
gnr = split_tags.explode()\
          .str.strip()\
          .str.strip("'")\
          .value_counts()\
          .reset_index()
gnr.columns = ['Genres', 'count']

额外提示:如果你原始的listed_in列里分类之间除了逗号还有空格,记得用strip()清理前后空白,否则像"Documentary"和" Documentary"会被识别成两个不同分类,导致统计结果不准。

内容的提问来源于stack exchange,提问作者Aniruddh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 02:18:14