Python股价预测模型出现IndexError: list index out of range问题求助
解决list index out of range错误的方案
这个IndexError: list index out of range问题我之前也碰到过,根源出在CSV文件的解析方式和数据格式不匹配上,结合你的代码和数据示例,我整理了具体的解决步骤:
错误原因分析
你提供的数据是用空格分隔的(比如11/01/2018 79830 78590 79845 78555),但csv.reader默认使用逗号作为分隔符,这就导致每一行被解析成只有一个元素的列表。当你尝试访问row[1]时,自然会因为列表长度不足而报错。另外,部分行可能存在数据缺失(比如示例里第一行缺少Volume列)或者空白行,也会触发类似问题。
修正后的代码
我调整了读取逻辑,添加了格式校验和错误处理,确保程序能稳定运行:
import csv # 初始化全局列表(如果是在函数内使用,建议改为函数内定义或返回结果) dates = [] prices = [] def get_data(IndFut): with open('IndFut.csv','r') as csvfile: # 指定空格作为分隔符,并跳过字段前的空格(处理多空格分隔的情况) csvFileReader = csv.reader(csvfile, delimiter=' ', skipinitialspace=True) next(csvFileReader) # 跳过表头行 for row in csvFileReader: # 跳过空行 if not row: continue # 校验行数据是否足够(至少包含日期和Close价格) if len(row) >= 2: try: # 提取日期中的日部分(注意你的格式是DD/MM/YYYY) dates.append(int(row[0].split('/')[0])) # 转换Close价格为浮点数 prices.append(float(row[1])) except (IndexError, ValueError) as e: # 捕获转换或索引错误,方便调试 print(f"处理行失败: {row},错误信息: {str(e)}") else: print(f"行格式不符合要求,已跳过: {row}")
关键修改点说明
- 指定分隔符:通过
delimiter=' '和skipinitialspace=True,让csv.reader正确识别空格分隔的字段,同时避免多空格产生空元素。 - 空行过滤:跳过空行,避免处理无意义的空列表。
- 数据校验:检查行长度是否满足需求,防止因数据缺失导致索引越界。
- 异常捕获:用
try-except捕获日期转换、价格转换时的错误,程序不会因个别错误行中断,还能输出调试信息。
如果你希望更灵活地处理CSV文件,也可以考虑使用pandas库来读取,它对不同分隔符的兼容性更好,代码也更简洁:
import pandas as pd df = pd.read_csv('IndFut.csv', sep='\s+') # \s+匹配任意空白符(空格、制表符等) dates = df['Day'].apply(lambda x: int(x.split('/')[0])).tolist() prices = df['Close'].tolist()
内容的提问来源于stack exchange,提问作者Lucas Saladini
相关产品推荐
相关产品推荐

