Python while循环未遍历完整数据集的代码问题排查
代码问题排查:while循环未遍历完整数据集
你的代码无法遍历全量数据集,核心问题如下:
- 直接导致循环提前终止的原因:循环体末尾写了
break
第一次循环跑完单条Hurst值计算、打印df.head(108)的逻辑后,会立刻触发break跳出整个while结构,后续所有迭代都不会执行。 - 其余会导致运行异常的隐患:
- 循环边界设置错误:pandas行索引从0开始计数,数据集最后一行的索引是
len(df)-1,你写的终止条件i <= len(df)+1就算删掉break,迭代到后期也会触发索引越界报错 - 赋值方式不规范:
df['Hurst'].iloc[i-1]属于链式赋值,本身就存在赋值不生效、结果不可预期的问题,你之前直接设置pd.options.mode.chained_assignment = None关闭了pandas的风险警告,相当于把报错提示屏蔽了,很容易出现值算完了但没成功写入DataFrame的情况 - 循环内反复执行
print(df.head(108))没有意义,全量运行时会重复打印成百上千次,严重拖慢代码运行速度
- 循环边界设置错误:pandas行索引从0开始计数,数据集最后一行的索引是
修正后代码
import numpy as np import pandas as pd from hurst import compute_Hc df = pd.read_csv("AARTIIND.csv") df['Hurst'] = np.nan # 设定滚动窗口长度 window = 105 # 从第一个完整窗口结束的位置开始遍历,直到数据集末尾 for i in range(window, len(df)+1): # 用loc做单值赋值,避免链式赋值的问题 df.loc[i-1, 'Hurst'] = compute_Hc(df['Close'].iloc[i-window:i], kind='price')[0] # 遍历完成后统一打印结果查看 print(df.head(110))
优化提示:如果数据集体量较大,逐行循环的计算效率很低,可以改用pandas原生的
rolling接口传入自定义计算函数,运行速度会有明显提升。
内容的提问来源于stack exchange,提问作者Mohit Garg
相关产品推荐
相关产品推荐

