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

使用Python遍历Excel填充drg_id列仅写入7条数据的问题排查

代码逻辑错误定位

你的代码有4处核心逻辑问题,直接导致填充结果不符合预期:

  1. 循环范围完全写反:你写的循环条件是for i in range(35021, len(drgs)),Python的range(start, end)是从start开始逐次递增、到小于end时停止。你的数据总行数是35021,len(drgs)本身就是35021,start等于end时循环体一次都不会执行,drg_list根本不会被填充全量数据。
  2. 随机索引存在越界风险:rand_reviewer函数里random.randint(0,35021)的上界写错了,长度为35021的列表合法索引范围是0~35020,取索引35021会直接触发IndexError,就算没触发报错也取不到有效值。
  3. 最终赋值用错了数据源:你前面写循环、写随机判断都是为了生成drg_list,结果最后创建Series赋值给新列的时候,用的是drg_id_col也就是原Excel里的DRG列本身,完全没用到你生成的drg_list,逻辑链路断了。
  4. 无意义的冗余逻辑:如果你的需求只是把DRG.xlsx里的DRG列按行对应填充到目标CSV的DataFrame里,根本不需要写随机抽取、while循环判断的逻辑,pandas原生的赋值操作可以直接完成,效率远高于手写Python循环。
修正方案

如果只是做简单的列值按行填充,直接用下面的最简代码即可:

import pandas as pd

# 读取源Excel数据
drg_source = pd.read_excel('C:/Cardiac DRG.xlsx', sheet_name=0)
# 重置索引保证行对齐,避免索引不匹配导致的值错位
df3 = df3.reset_index(drop=True)
drg_source = drg_source.reset_index(drop=True)
# 直接把源数据的DRG列赋值给目标表的新列
df3['drg_id'] = drg_source['DRG'].values

如果你确实需要实现「随机抽取DRG值填充,且填充值和原行DRG值不重复」的逻辑,修正后的代码如下:

import pandas as pd
import random

drg_source = pd.read_excel('C:/Cardiac DRG.xlsx', sheet_name=0)
all_drg_values = drg_source['DRG'].tolist()
total_rows = len(all_drg_values)
fill_list = []

for i in range(total_rows):
    # 修正随机索引范围,避免越界
    current_rand = all_drg_values[random.randint(0, total_rows - 1)]
    # 循环直到随机值和当前行原始值不相等
    while current_rand == all_drg_values[i]:
        current_rand = all_drg_values[random.randint(0, total_rows - 1)]
    fill_list.append(current_rand)

df3['drg_id'] = pd.Series(fill_list)
额外注意事项
  • 做pandas列赋值前先确认两个表的行数完全一致,避免出现值错位、末尾值缺失的问题
  • 不要硬编码行数(比如你代码里写死的35021),用len()动态获取长度,后续数据行数变化时不需要改代码
  • 涉及全量数据遍历的操作优先用pandas内置方法,比手写for循环效率高10~100倍

内容的提问来源于stack exchange,提问作者muffntuf

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 01:54:23