2016-06-08 170 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)]) 

所以在循环,在迭代每一个元组解压到这些变量,并提供与每次循环!

这是否解释了它?