簡體   English   中英

在for循環中使用多個變量解包錯誤

[英]Unpacking error with multiple variables in for loop

我希望基於 position MrkA 和 Mrk1 的第一個實例提取數字 dataframe(浮動)。 我對 MrkA 的第二個實例不感興趣,因為我知道通過df1行提取哪些列

輸入:

df = pd.DataFrame({'A':['sdfg',23,'MrkA',34,0,56],'B':['jfgh',23,'sdfg','MrkB',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]})

      A     B      C     D     E     F    G    H     I
0  sdfg  jfgh    cvb   rrb   dfg   dfg  dfg  dfg   dfg
1    23    23      7     7     7     7    7    7     7
2  MrkA  sdfg  dsfgA  MrkA   gfd  sdfA  sdA  gfA  sdfA
3    34  Mrk1   ghks     3  Mrk2     5    5    5     5
4     0     0     47     0    12     0    8    0     7
5    56    56      3     7     1     4    9    8    23

for i,j in range(df.shape[1]):
    for k,l  in range(df.shape[0]):
        if df.iloc[k,i] == 'MrkA'and df.iloc[l,j] == 'Mrk1':
            col = i
            row = k
            df1=df.iloc[row+2:,[col,col+1,col+2,col+4,col+5,col+7,col+8]]
            break

Output: cannot unpack non-iterable int object

所需 Output:

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

我該如何進行?

您的問題是df.shape[0] / df.shape[1]是單個元素。 因此,嘗試將range(value)解壓縮為 2 個索引會導致錯誤。

它應該是:

for i in range(df.shape[1]):
    for j  in range(df.shape[0]):

然后您可以應用所需的邏輯來提取行。

請注意,您忽略第二行的方式還不清楚,第二行也是全數字。 如果這只是一個拼寫錯誤,您可以嘗試以下操作來提取所有完整的數字行並在那里應用一些邏輯:

df[df.applymap(np.isreal).all(1)]

編輯

盡管從您的具體示例中不清楚邏輯是什么:

  1. 在您給出的示例中,沒有Mrk1而是MrkB
  2. 為什么D列消失了?

給出所需 output 的硬編碼示例應該類似於以下內容:

import pandas as pd
df = pd.DataFrame({'A':['sdfg',23,'MrkA',34,0,56],'B':['jfgh',23,'sdfg','MrkB',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]})

for r in range(0, df.shape[0] - 1):
    for c in range(df.shape[1] - 1):
        if df.iloc[r, c] == "MrkA" and df.iloc[r + 1, c + 1] == "MrkB":
            print(df.iloc[r + 2:, :])

這給出:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM