2014-10-28 26 views
1

所以我有一段代碼是迭代通過數據框切換到元組,然後遍歷每個值後的第一個。昨天一切正常,但今天,對於某些行,它不排除第一個索引,我不知道爲什麼。for循環後,特定的索引與python不工作

下面是代碼:

for rows in data.itertuples(): 
    r = int(rows[0]) + 1 
    for i in rows[1:]: 
     c = rows.index(i) 
     print r, i, c, int(rows.index(i)), rows 

我複製打印輸出前2行的迭代。第一行工作完美。第二行有一個問題。我們所期望的是,對於第一個元素來說,c會被設置爲1,而第一個元素將會被設置爲1,但是它會是0.這是在數據幀的行中隨機發生的。有沒有人有任何想法爲什麼for循環沒有跳過第一個元素?

1 3 1 1 (0, 3, 27000, '1060', 'QMS', 'TEST', 'DAY', 'LMT') 

1 1 3 

1 27000 2 2 (0, 3, 27000, '1060', 'QMS', 'TEST', 'DAY', 'LMT') 

1 2 27000 

1 1060 3 3 (0, 3, 27000, '1060', 'QMS', 'TEST', 'DAY', 'LMT') 

1 3 1060 

1 QMS 4 4 (0, 3, 27000, '1060', 'QMS', 'TEST', 'DAY', 'LMT') 

1 4 QMS 

1 ARCA 5 5 (0, 3, 27000, '1060', 'QMS', 'TEST', 'DAY', 'LMT') 

1 5 ARCA 

1 DAY 6 6 (0, 3, 27000, '1060', 'QMS', 'TEST', 'DAY', 'LMT') 

1 6 DAY 

1 LMT 7 7 (0, 3, 27000, '1060', 'QMS', 'TEST', 'DAY', 'LMT') 

1 7 LMT 

**2 1 0 0 (1, 1, 3500, '1060', 'QMS', 'TEST', 'DAY', 'LMT')** 

2 0 1 

2 3500 2 2 (1, 1, 3500, '1060', 'QMS', 'TEST', 'DAY', 'LMT') 

2 2 3500 

2 1060 3 3 (1, 1, 3500, '1060', 'QMS', 'TEST', 'DAY', 'LMT') 

回答

3

rows.index(i)將在rows具有價值i找到的第一個項目。當您達到第二個rows集合時,rows[0]等於1,因此rows.index(1)爲零,即使rows[1]也等於1。

如果你只是想遍歷iterable的索引和值,我建議使用枚舉。

for rows in data.itertuples(): 
    r = int(rows[0]) + 1 
    for c, i in enumerate(rows): 
     #skip the first value 
     if c == 0: 
      continue 
     #do whatever here 

或者

for rows in data.itertuples(): 
    r = int(rows[0]) + 1 
    for c, i in enumerate(rows[1:], 1): #skip the first item implicitly 
     #do whatever here 
+0

這工作完全,謝謝!!!! – Chris 2014-10-28 15:36:39