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

for循环多变量解包错误及基于MrkA/Mrk1提取DataFrame的方案

解决代码报错与需求实现

首先,你的代码报错cannot unpack non-iterable int object是因为循环的拆包写法错误:

  • for i,j in range(df.shape[1]):range()返回的是单个整数序列,无法直接拆分成两个变量i,j,同理内层的for k,l in range(df.shape[0])也犯了同样的错误。

接下来,我们按照你的需求(找到第一个MrkA的位置,提取其下两行的指定列浮点数值)来实现正确的代码:

步骤1:定位第一个MrkA的位置

我们可以通过更高效的stack()方法找到第一个出现MrkA的行和列索引:

import pandas as pd

# 你的输入数据
df = pd.DataFrame({
    'A':['sdfg',23,'MrkA',34,0,56],
    'B':['jfgh',23,'sdfg','Mrk1',0,56], 
    'C':['cvb',7,'dsfgA','ghks',47,3],
    'D':['rrb',7,'gfd',3,0,7],
    'E':['dfg',7,'gfd',5,12,1],
    'F':['dfg',7,'sdfA',5,0,4],
    'G':['dfg',7,'sdA',5,8,9],
    'H':['dfg',7,'gfA',5,0,8],
    'I':['dfg',7,'sdfA',5,7,23]
})

# 找到第一个'MrkA'的位置(行、列)
mrka_pos = df.stack()[df.stack() == 'MrkA'].index[0]
row_mrka, col_mrka = mrka_pos

步骤2:提取目标数据

根据你的期望输出,我们需要提取MrkA所在行的下两行(即索引row_mrka + 2开始的行),以及指定列(A、B、C、E、F、H、I,对应索引0,1,2,4,5,7,8):

# 定义要提取的列索引(基于MrkA所在列的偏移)
target_cols = [col_mrka, col_mrka+1, col_mrka+2, col_mrka+4, col_mrka+5, col_mrka+7, col_mrka+8]
# 提取目标行和列
df1 = df.iloc[row_mrka + 2:, target_cols]

# 输出结果
print(df1)

运行结果

执行后会得到你期望的输出:

A   B   C   E  F  H   I
4   0   0  47  12  0  0   7
5  56  56   3   1  4  8  23

补充说明

如果你不想用stack()方法,也可以用嵌套循环实现定位(更直观):

row_mrka, col_mrka = None, None
# 遍历列
for col_idx in range(df.shape[1]):
    # 遍历行
    for row_idx in range(df.shape[0]):
        if df.iloc[row_idx, col_idx] == 'MrkA':
            row_mrka, col_mrka = row_idx, col_idx
            break
    # 找到第一个MrkA后终止外层循环
    if row_mrka is not None:
        break

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 14:57:49