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

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 

问题分析

  1. 内层循环的b每次从0开始遍历,而非当前i的位置,导致永远在处理第一个Part Number,无法切换到后续编号。
  2. 内层循环中未更新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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 02:20:53