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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:12:15