pandas提取文本日期时间时报IndexError: list index out of range求助
错误原因
出现IndexError: list index out of range的核心原因是遍历到部分不符合格式的行,执行line.split()后得到的列表长度不足2,直接取x[0]、x[1]触发索引越界。你逐行测试时用的都是格式正常的行,不会触发问题,但全量运行时会遍历到异常行(比如空行、格式残缺的行、带多余空白/换行符的异常行),哪怕过了前置的filter_message、is_single_offer校验,依然存在漏判的情况。
修复方案
- 先对分割后的列表做长度校验,同时增加异常行打印,方便定位问题行,修改后的代码如下:
for line in msgs: if filter_message(line): if is_single_offer(line): # 先做预处理,去掉首尾空白、换行符 line = line.strip() x = line.split() # 加长度校验,避免索引越界 if len(x) >= 2: # 获取日期 dating = x[0] Date.append(dating.replace(',','')) # 获取时间 timing = x[1] Time.append(timing) else: # 打印异常行方便排查 print(f"格式异常行:{line},分割后长度:{len(x)}")
- 优化前置校验逻辑,在
filter_message、is_single_offer函数中补充行格式校验,比如先判断strip后的行split长度是否≥2,不符合直接返回False,减少无效后续处理。 - 如果是从文本文件读入的msgs,读入时就可以做一次清洗,过滤掉空行、首尾全是空白的无效行,再送入后续遍历逻辑。
参考数据样例:
内容的提问来源于stack exchange,提问作者faisal zahoor
相关产品推荐
相关产品推荐

