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

Python Pandas矩阵设置及While循环死循环问题求助

解决Pandas DataFrame死循环及矩阵逻辑实现问题

问题描述

创建一个15×15的Pandas DataFrame,所有单元格初始值为0.9,需要实现以下逻辑:

  • 将矩阵对角线设置为0;
  • 每行中若某单元格值为0,则将其前后5列的单元格设为1(即df.iloc[i][j] = 0时,设置df.iloc[i][j+5] = 1或df.iloc[i][j-5] = 1,需确保列索引在有效范围内)。

但编写的脚本陷入死循环无法结束,请求解决。

输入代码

row, col = 15, 16
a = pd.DataFrame.from_records([[0.9]*col]*row)
a = a.loc[:, a.columns != 0]

预期输出

预期得到一个15×15矩阵:

  • 对角线位置全为0;
  • 每个0的位置,若存在j+5列则设为1,若存在j-5列则设为1;
  • 其余位置保持初始值0.9。

当前死循环脚本

row, col = 15, 16
a = pd.DataFrame.from_records([[0.9]*col]*row)
a = a.loc[:, a.columns != 0]
column3 = list(a)
for i, j in a.iterrows():
    for k in column3:
        if k == i + 1:
            a.iloc[i][k] = 0


for i, j in a.iterrows():
    for k in column3:
        step = +5 if k <=5 else -5
        while k <= len(a.index):
            if a.iloc[i][k] == 0:
                k += step
                a.iloc[i][k] = 1

pd.set_option('display.max_rows', None)
pd.set_option('display.max_columns', None)
a 

死循环原因分析

第二个嵌套循环中的while k <= len(a.index)存在逻辑错误:

  • len(a.index)是15,但DataFrame的列索引是0到14,当k增加到15时,访问a.iloc[i][k]会触发索引越界,且循环没有终止条件;
  • step的设置逻辑不合理,导致k会持续累加,无法跳出循环。

修正后的代码

import pandas as pd

# 初始化15×15的DataFrame,所有值为0.9
df = pd.DataFrame([[0.9]*15 for _ in range(15)])

# 设置对角线为0
for i in range(15):
    df.iloc[i, i] = 0

# 遍历每行,处理0的前后5列
for i in range(df.shape[0]):
    # 找到当前行中值为0的列索引
    zero_cols = df.loc[i][df.loc[i] == 0].index
    for j in zero_cols:
        # 检查j+5列是否在有效范围内
        if j + 5 < df.shape[1]:
            df.iloc[i, j+5] = 1
        # 检查j-5列是否在有效范围内
        if j - 5 >= 0:
            df.iloc[i, j-5] = 1

# 显示完整矩阵
pd.set_option('display.max_rows', None)
pd.set_option('display.max_columns', None)
print(df)

代码说明

  1. 初始化优化:直接创建15×15的DataFrame,避免原代码中创建16列再删除的冗余操作;
  2. 对角线设置:用简单循环直接定位iloc[i,i],比iterrows更高效;
  3. 边界检查:处理前后5列时,先判断索引是否在0到14的有效范围内,避免索引越界;
  4. 无死循环:通过遍历每行的0位置并逐一处理,逻辑清晰,不会出现无限循环。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 09:10:20