如何迭代首行缺列、出现索引越界报错的pandas DataFrame
错误原因
- 实际读取到的DataFrame仅含4列:报错提示
index 4 is out of bounds for axis 0 with size 4直接说明当前DataFrame的列数为4,并非预期的5列,大概率是读取环节识别错误(如合并表头、分隔符不匹配导致列被合并/拆分)。 - 迭代代码逻辑有误:
iterrows()返回的row是对应行的Series对象,row.index就是DataFrame的列名列表,你写row.index[0]本质是取第1个列名,而非该行对应位置的数值;如果要取行内第n个位置的值,应该用row.iloc[n]语法。
解决步骤
- 先确认实际数据结构,不要依赖截图判断,运行以下代码输出真实列信息:
# 打印实际列数、全部列名 print(f"实际列数:{len(df.columns)}") print(f"列名列表:{df.columns.tolist()}")
- 如果输出列数确实为4,需要回头调整文件读取参数: - 读取Excel时:如果存在合并表头,通过`header`参数指定表头所在行,多级表头可传入行号列表(如`header=[0,1]`)识别。 - 读取CSV/文本文件时:核对`sep`分隔符参数,确保和文件实际的列分隔符(逗号、制表符等)匹配,避免多列被合并为一列。
- 修正迭代逻辑,不要硬编码索引取值,按需选择写法:
- 遍历输出每行的所有值:
for index, row in df.iterrows(): print(row.tolist())
- 逐列按字段名输出(比固定索引取值更稳妥):
for index, row in df.iterrows(): for col_name in df.columns: print(f"{col_name}: {row[col_name]}")
内容的提问来源于stack exchange,提问作者ibexy
相关产品推荐
相关产品推荐

