Dataframe遍历问题:仅输出首个符合条件元素,如何输出全部?
问题分析与修正代码
原代码存在几个关键问题导致只能输出首个匹配结果:
- 遍历方式错误:
for i in df实际是遍历DataFrame的列名,而非行索引,逻辑完全偏离需求。 - 循环内强制重置
i=0:每次循环都把索引拉回第0行,根本没遍历后续行。 - 过早终止循环:两个条件判断里的
break语句会在找到第一个匹配项后直接退出循环。 - 错误的else分支:原else会在每一行不满足条件时输出提示,导致大量重复无效信息。
修正后的代码:
div = "Divergence spotted at " found = False # 遍历行索引,注意要留最后一行避免i+1越界 for i in range(len(df) - 1): if (df.High[i] < df.High[i+1]) and (df.RSI[i] > df.RSI[i+1]): print(f'{div}{i}') found = True elif (df.High[i] > df.High[i+1]) and (df.RSI[i] < df.RSI[i+1]): print(f'{div}{i}') found = True # 整个循环结束后如果没找到任何匹配,再输出提示 if not found: print("no divergence spotted")
关键修改说明:
- 改用
range(len(df)-1)遍历行索引,确保能安全访问i+1位置的元素,避免索引越界。 - 把
div的定义移到循环外,无需重复初始化。 - 移除所有
break语句,让循环完整遍历所有符合条件的行。 - 新增
found标记,仅在整个循环结束后未找到任何匹配时才输出“未发现背离”的提示,避免冗余输出。
内容的提问来源于stack exchange,提问作者A K S H A Y y K U M A R
相关产品推荐
相关产品推荐

