[英]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)]
盡管從您的具體示例中不清楚邏輯是什么:
Mrk1
而是MrkB
。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.