Python嵌套While循环解析Excel问题:无法切换至第二个Part Number
Python嵌套循环解析Excel表格问题
我是Python新手,需要创建嵌套循环解析Excel表格。表格包含ID、Model、Part Number、Part Description、Year列,期望输出格式为:Part Number, Toyota > Model > Year | Toyota > Model > Year...,即每个Part Number仅输出一次,列出所有适配的型号和年份。我编写的代码能实现部分功能,但无法切换到第二个Part Number,运行时会出现索引越界错误。
原代码
import pandas as pd import xlrd workbook = pd.read_excel('Query1.xls') workbook.head() i = 0 l = int(len(workbook)) a = workbook['Part Number'].iloc[i] while i < l: b = 0 c = workbook['Part Number'].iloc[b] print(a) while c == a: #print(c) print(b, 'TOYOTA >', workbook['Model'].iloc[b], ' > ', workbook['Year'].iloc[b], ' | ', end = ' ') b = b + 1 print() i = i + b
问题分析
- 内层循环的
b每次从0开始遍历,而非当前i的位置,导致永远在处理第一个Part Number,无法切换到后续编号。 - 内层循环中未更新
c的值,c始终是第一个Part Number,会让循环一直执行直到b超出DataFrame行数范围,触发索引越界错误。
解决方案
方案一:用pandas分组(推荐,简洁高效)
利用pandas的groupby方法直接按Part Number分组,天然适配需求:
import pandas as pd # 读取Excel文件 df = pd.read_excel('Query1.xls') # 按Part Number分组处理 for part_num, group in df.groupby('Part Number'): # 生成每一项的适配字符串 fit_items = [f'TOYOTA > {row["Model"]} > {row["Year"]}' for _, row in group.iterrows()] # 按指定格式输出 print(f'{part_num}, {" | ".join(fit_items)}')
方案二:修正嵌套循环逻辑
如果坚持用嵌套循环,调整遍历的起始位置和循环条件:
import pandas as pd df = pd.read_excel('Query1.xls') total_rows = len(df) current_index = 0 while current_index < total_rows: current_part = df['Part Number'].iloc[current_index] fit_list = [] # 从当前索引开始,遍历相同Part Number的行 while current_index < total_rows and df['Part Number'].iloc[current_index] == current_part: fit_list.append(f'TOYOTA > {df["Model"].iloc[current_index]} > {df["Year"].iloc[current_index]}') current_index += 1 # 拼接并输出结果 print(f'{current_part}, {" | ".join(fit_list)}')
内容的提问来源于stack exchange,提问作者Nikita
相关产品推荐
相关产品推荐

