2016-06-08 162 views
2

我有一個Python代碼下面一行理解:蟒蛇的for循環

for tradeName, trade in data.iterrows(): 
    ... 

「數據」是一個熊貓數據框下面的形式:

timestamp   open high low  close volume   
2000-01-03 00:00:00 1481.50 1481.50 1480.50 1480.50 4 
2000-01-03 00:30:00 1480.25 1480.50 1479.75 1480.50 4 
2000-01-03 01:00:00 1480.50 1481.50 1480.50 1481.25 7 

我不知道如何進行循環在這種情況下工作,特別是與表達式for tradeName, trade... 這些名稱是指什麼?特別是他們不出現在數據框頭,並沒有在其他地方指定?

+1

您是否嘗試在循環頂部添加'print(tradeName,trade)'來查看這些變量是什麼? – SethMMorton

+2

或者,你看看[iterrows API](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.iterrows.html):「迭代DataFrame行爲(index ,系列)對。「 – SethMMorton

+1

「iterrows」要小心,如果你有一個大型的DataFrame,速度會非常慢。 'itertuples' ** **更快**,因爲它不需要爲每一行數據構造一個Series對象。 – SethMMorton

回答

2

tradeName和trade只是自定義的「循環」變量,以獲取data.iterrows()將返回的相應值。 TradName是索引,交易是索引的系列。

下面這些應該返回相同的結果:

for tradeName, trade in data.iterrows(): 
    for x, y    in data.iterrows(): 
    for apple, orange in data.iterrows(): 
+0

我不確定「虛擬變量」是否合適。也許「循環變量」。 – SethMMorton

+0

與其向OP提供'iterrows()'的輸出,不如說明什麼元組解包是更有意義的。然後OP將得到更一般的答案。 – SethMMorton

+0

這裏是什麼是返回在循環 的頂部(時間戳(「2000-01-03 00:00:00」),開1481.50 高1481.50 低1480.50 接近1480.50 量添加打印(商品名稱,商品) 4.00 tradeClose 1459.25 趨勢-1.00 netgain 2512.50 名稱:2000-01-03 00:00:00,dtype:float64) 所以我假設我現在可以弄清楚它們是什麼。 –

4

有兩件事情會在這裏,首先是拆包和第二是循環。

可以解壓在一個元組元素,同時爲它們分配如下:

a,b,c = tuple([1,2,3]) 
print(b) 

此外,如果你有元組的迭代,你可以解開每一個順序。

a = [1,2,3] 
b = ['a','b','c'] 

for x,y in zip(a,b): 
    print(x) 
    print(y) 

# to see what zip(a,b) is 
print([i for i in zip(a,b)]) 

所以在循環,在迭代每一個元組解壓到這些變量,並提供與每次循環!

這是否解釋了它?