Python新手求助:运行CSV处理代码报IndexError索引越界错误
错误原因与修复方案
错误解释
你遇到的 IndexError: list index out of range 是因为这行代码:
csv_file_name = csv_file.split('\\')[7]
执行 split('\\') 后得到的列表元素数量不足8个(索引从0开始,第7个是第8个元素),导致找不到对应索引的内容。
问题出在两个核心点:
- 硬编码索引
[7]:不同文件的路径层级可能不一样,有的路径分割后元素数量少于8个,固定写索引7必然出错。 - 路径分隔符局限性:
\\是Windows系统的路径分隔符,如果是Linux/macOS系统,路径分隔符是/,用\\分割会把整个路径当成一个元素,同样会触发索引越界。
修复方法
不要手动分割路径拿文件名,用Python内置的路径处理模块,兼容性更强且不会出错:
方法1:使用os.path模块
import os # 替换原代码中csv_file_name的赋值行 csv_file_name = os.path.basename(csv_file)
方法2:使用pathlib(Python3.4+推荐写法)
from pathlib import Path # 替换原代码中csv_file_name的赋值行 csv_file_name = Path(csv_file).name
这两种方法不管是Windows还是Linux/macOS系统,不管路径有多少层级,都能准确提取文件名。
原代码与报错信息
原运行代码
final_df = pd.DataFrame() #empty dataframe for csv_file in file_list: df = pd.read_csv(csv_file) csv_file_name = csv_file.split('\\')[7] print('Processing File : {}'.format(csv_file_name)) df.columns = df.columns.str.replace(' ', '') df['TIMESTAMP'] = pd.to_datetime(df['TIMESTAMP']) df.set_index(['TIMESTAMP'], inplace=True) if 'Unnamed:13' in df.columns: df.drop(['Unnamed:13'], axis=1, inplace=True) df_trim = df.apply(lambda x: x.str.strip() if x.dtype == 'object' else x) new_df = df_trim[df_trim['SERIES'].isin(['EQ', 'BE', 'SM'])] final_df = final_df.append(new_df) final_df.sort_index(inplace=True) #to sort by dates
报错信息
IndexError Traceback (most recent call last) Cell In[17], line 5 3 for csv_file in file_list: 4 df = pd.read_csv(csv_file) ----> 5 csv_file_name = csv_file.split('\\')[7] 6 print('Processing File : {}'.format(csv_file_name)) 7 df.columns = df.columns.str.replace(' ', '') IndexError: list index out of range
内容的提问来源于stack exchange,提问作者Aishwarya Agarwal
相关产品推荐
相关产品推荐

